Javascript数组对象输出

时间:2017-06-07 18:53:21

标签: javascript arrays object

任何人都可以帮助我,我是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"
    ]
}
}

当我在每个问题中只插入一个值时,无法理解每个问题数组中插入四个值的位置 数组对象。

有没有办法解决这类问题。

请帮帮我。我完全糊涂了。提前谢谢。

3 个答案:

答案 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;
&#13;
&#13;