任何人都可以帮助我,我是javascript的新手。我无法理解下面的代码行。我花了好几个小时来调试这段代码,但我无法纠正。
var data = [
{"name":"123123123123"},
{"name":"123123123124"},
{"name":"123123123125"},
{"name":"123123123126"}
];
var x1 = {}
var basicS = {
"question":[]
}
data.forEach(function(val,i){
x1[val.name]=basicS;
});
console.log(x1);
data.forEach(function(val,i){
x1[val.name].question.push('insert');
});
console.log(x1);
输出:
{
123123123123:{
question:[
0:"insert"
1:"insert"
2:"insert"
3:"insert"
]
},
123123123124:{
question:[
0:"insert"
1:"insert"
2:"insert"
3:"insert"
]
},
123123123125:{
question:[
0:"insert"
1:"insert"
2:"insert"
3:"insert"
]
},
123123123126:{
question:[
0:"insert"
1:"insert"
2:"insert"
3:"insert"
]
}
}
预期输出应为:
{
123123123123:{
question:[
0:"insert"
]
},
123123123124:{
question:[
0:"insert"
]
},
123123123125:{
question:[
0:"insert"
]
},
123123123126:{
question:[
0:"insert"
]
}
}
当我在每个问题中只插入一个值时,无法理解每个问题数组中插入四个值的位置 数组对象。
有没有办法解决这类问题。
请帮帮我。我完全糊涂了。提前谢谢。
答案 0 :(得分:0)
您可能想要创建多个对象:
data.forEach(function(val,i){
x1[val.name]={
"question":[]
};
});
或者两个循环都在一个O(n)而不是O(2n):
data.forEach(function(val,i){
(x1[val.name]=x1[val.name] || {question:[]}).question.push(val);
});
答案 1 :(得分:0)
这种情况正在发生,因为x1
中的每个值都引用了相同的 basicS
数组。所以你要将insert
推进到该阵列四次。
为避免这种情况,请为x1
中的每个项目添加一个新数组:
var data = [
{"name":"123123123123"},
{"name":"123123123124"},
{"name":"123123123125"},
{"name":"123123123126"}
];
var x1 = {}
data.forEach(function(val,i){
x1[val.name]= { "question": [] };
});
data.forEach(function(val,i){
x1[val.name].question.push('insert');
});
console.log(x1);
或者,根据您最终要做的事情,您可以使用初始值填充数组,而不是循环两次:
var data = [
{"name":"123123123123"},
{"name":"123123123124"},
{"name":"123123123125"},
{"name":"123123123126"}
];
var x1 = {}
data.forEach(function(val,i){
x1[val.name] = { "question": ["insert"] };
});
console.log(x1);
答案 2 :(得分:0)
保持简单。
使用新对象作为容器进行填充。 从" forEach"切换" for" for"循环以避免混淆。 在每次迭代时创建一个新的数组实例以供参考。 将索引指定为0以插入。在迭代时获取对象并将其设置为name属性值。 然后在key' 0'
分配一个对象,并将问题属性设置为您的数组
var data = [{
"name": "123123123123"
},
{
"name": "123123123124"
},
{
"name": "123123123125"
},
{
"name": "123123123126"
}
];
var obj = {};
for (var i = 0; i < data.length; i++) {
var insert = [];
insert['0'] = 'insert';
obj[data[i].name] = {
question: insert
}
};
console.log(obj);
&#13;