用于循环填充对象的Javascript
我有一个域数组:var domains=[domain1,domain2,domain3] 预期结果应为:用于循环填充对象的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 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}))} );