Javascript for循环填充对象

Rol*_*and 0 javascript 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: 'domain2', value: 'domain2'},
    {text: 'domain3', value: 'domain3'},
  ]
};
Run Code Online (Sandbox Code Playgroud)

这是我试图做的,但它不起作用:

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],
    }]
  };
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里玩代码:https://jsbin.com/vadered/edit?js,console

Mih*_*nut 7

问题是每次domainData使用for 循环时都要创建一个新对象.

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

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

console.log(domainData);
Run Code Online (Sandbox Code Playgroud)


Buc*_*ket 5

domainData对象移到函数循环外部,然后添加以下值options:

var domainData = {
    type: 'combo',
    name: 'domain',
    width: 200,
    offsetLeft: 30,
    label: 'Test label',
    required: true,
    options: []
};

for(var i = 0; i < domains.length; i++) {
    domainData.options.push({ 'text':domains[i], 'value': domains[i] });
}
Run Code Online (Sandbox Code Playgroud)