Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于循环填充对象的Javascript_Javascript_Arrays_For Loop - Fatal编程技术网

用于循环填充对象的Javascript

用于循环填充对象的Javascript,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个域数组:var domains=[domain1,domain2,domain3] 预期结果应为: var domainData = { type: 'combo', name: 'domain', width: 200, offsetLeft: 30, label: 'Test label', required: true, options: [ {text: 'domain1', value: 'domain1'}, {text: 'dom

我有一个域数组:var domains=[domain1,domain2,domain3]

预期结果应为:

var domainData = {
  type: 'combo',
  name: 'domain',
  width: 200,
  offsetLeft: 30,
  label: 'Test label',
  required: true,
  options: [
    {text: 'domain1', value: 'domain1'},
    {text: 'domain2', value: 'domain2'},
    {text: 'domain3', value: 'domain3'},
  ]
};
这正是我想做的,但不起作用:

for(var i = 0; i < domains.length; i++) {
  console.log(domains[i]);
  var domainData = {
    type: 'combo',
    name: 'domain',
    width: 200,
    offsetLeft: 30,
    label: 'Test label',
    required: true,
    options: [{
      text: domains[i],
      value: domains[i],
    }]
  };
}

您可以在此处使用代码:

问题是,每次使用for循环创建新的domainData对象时,您都会创建新的domainData对象

您可以通过传递回调函数来使用map方法,该函数应用于给定数组中的每个项

var域=[domain1,domain2,domain3]; 变量域数据={ 键入:“组合”, 名称:'域', 宽度:200, 偏移量:30, 标签:'测试标签', 要求:正确, 选项:domains.mapelem=>{text:elem,value:elem} }; console.logdomainData 将domainData对象移到函数循环之外,然后添加选项值:


您遇到的问题是在每次迭代时都要重新创建父对象,而不是附加到子数组

因此,创建子数组并在创建对象时使用它

var域=[domain1,domain2,domain3]; var options=domains.mapfunctiondomain{ 返回{ 文本:域, 值:域 } } //没有地图 //var期权=[];
//对于var i=0;我对你的代码玩了一点,结果是:

var域=[domain1,domain2,domain3]; var期权BIS=[]; forvar i=0;i.长度;i++{ 选择之二推{ 正文:域[i], 值:域[i] } } 变量域数据={ 键入:“组合”, 名称:'域', 宽度:200, 偏移量:30, 标签:'测试标签', 要求:正确, 选项:选项之二 };
logdomainData不需要循环,因为实际上只有一个对象

您需要的是将域数组转换为其他对象中的选项。 试试这个:

var domainData = {
    type: 'combo',
    name: 'domain',
    width: 200,
    offsetLeft: 30,
    label: 'Test label',
    required: true,
    options: domains.map(function(d){ return {text: d, value: d}})
  };
var域=[domain1,domain2,domain3]; 变量域数据={ 键入:“组合”, 名称:'域', 宽度:200, 偏移量:30, 标签:'测试标签', 要求:正确, 选项:[] }; domains.forEachdomain=>{ domainData.options.push{ 文本:域, 值:域 } };
console.logdomainData 由于可能存在嵌套值,因此最好创建object domainData的新副本

var domains = ["domain1", "domain2", "domain3"];
var domainData = {
    type: 'combo',
    name: 'domain',
    width: 200,
    offsetLeft: 30,
    label: 'Test label',
    required: true,
  };
var newObjectData  = Object.assign( {}, domainData, {options: domains.map((val) => ({text: val, value: val}))} );

因为您不断地重新创建父对象,而不是子对象,这比其他对象要复杂一点,但是有效的非无安全性需要更复杂一点。
var domains = ["domain1", "domain2", "domain3"];
var domainData = {
    type: 'combo',
    name: 'domain',
    width: 200,
    offsetLeft: 30,
    label: 'Test label',
    required: true,
  };
var newObjectData  = Object.assign( {}, domainData, {options: domains.map((val) => ({text: val, value: val}))} );