Json数组错误无法设置属性' model'未定义的

时间:2015-07-07 10:30:36

标签: javascript jquery arrays json

var temp = [{}]
var as = ['a', 'b']
for (i = 0; i < as.length; i++) {
    temp[i].model = as[i]
}

我收到以下错误:

  

无法设置属性&#39;模型&#39;未定义的

5 个答案:

答案 0 :(得分:2)

好的,这应该适合你:

var temp = [];
var as = ['a', 'b'];
for (i = 0; i < as.length; i++) {
    temp[i] = temp[i] || {};
    temp[i].model = as[i];
}

由于as可能超过temp,因此您需要确保temp[i]存在,这正是temp[i] = temp[i] || {};的作用:

  • 如果temp[i]存在,则无效。
  • 如果temp[i]不存在,则会为{}分配一个新的空对象(temp[i])。

请注意,我从{} - &gt;中删除了temp = [{}] temp = []。你现在不需要第一个空对象。

如果你绝对肯定temp在循环之前永远不会包含任何值,你可以这样做:

for (i = 0; i < as.length; i++) {
    temp[i] = { model: as[i] };
}

或者:

temp = as.map(function(item){ return { model: item }});

答案 1 :(得分:0)

temp的长度为1,as的长度为2. temp[1]因此未定义。

我认为这更好地传达了代码的意图,并且是正确的:

var temp = [];
var as = ['a', 'b'];

for (var i = 0; i < as.length; i++) {
    temp[i] = {model: as[i]};
}

答案 2 :(得分:0)

要在temp中始终拥有足够的值,您可以预先填充它:

var as = ['a', 'b'];
var temp = as.map(function() { return {}; });
for (i = 0; i < as.length; i++) {
    temp[i].model = as[i]
}

答案 3 :(得分:0)

试试这个

var temp = [];
var as = ['a', 'b']
for (i = 0; i < as.length; i++) {
    temp.push({'model':as[i]});
}
console.log(temp);

Fiddle

答案 4 :(得分:0)

这很简单。

使用以下内容解决您的问题。

> var temp =[[]]; var as = ['a','b'] for(i=0;i<as.length;i++){  
> temp.push({model : as[i]}) }
> 
> console.log(temp)

如果您有任何澄清,请告诉我