我有这样的价值
var npi = {
code1: 'sm1',
code2: 'sm8',
code3: 'sm9',
code4: ''
}
我想将前3个项目推送到数组
var arr = [];
for (var i =0;i< 3;i++) {
arr.push(npi.code+''+i);
}
它说错误npi.code未定义,因为它没有考虑npi.code1而不是npi.code。
在这里我认为它的连续问题。任何人都可以建议我帮忙。谢谢。
答案 0 :(得分:3)
npi.code+''+i
无效,因为没有此类密钥code+''+i
。相反,您可以通过这种方式访问密钥npi['code'+i]
(就像使用索引访问数组一样)。
同样在您的代码中,i
以0
和code0
开头是未定义的。因此,i
应以1
试试这个
var arr = [];
for (var i = 1;i <= 3;i++) {
arr.push(npi['code'+i]);
}
答案 1 :(得分:2)
var npi = {
code1: 'sm1',
code2: 'sm8',
code3: 'sm9',
code4: ''
}
var arr = [];
for (var i =1;i<= 3;i++) {
arr.push(npi['code'+i]);
}
console.log(arr)
&#13;
对于你的情况,从1到3迭代,并从像npi['code'+i]
这样的obj中获取值,这里你需要使用括号Property_accessors,因为它将值作为字符串。
答案 2 :(得分:2)
您可以使用Object.keys()方法和forEach()
循环:
var npi = {
code1: 'sm1',
code2: 'sm8',
code3: 'sm9',
code4: ''
}
var arr = [];
Object.keys(npi).forEach(function(key) {
if(npi[key] != ''){
arr.push(npi[key]);
}
});
console.log(arr);
Object.keys()方法返回给定对象自己的可枚举属性的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于-in循环也枚举了原型链中的属性。
您的代码无法正常工作的原因是,当尝试使用.
表示法获取对象的值时,该属性不能是字符串(当您使用+''+
连接时实际上将对象属性转换为字符串)。字符串仅在[]
的情况下有效。例如:
arr.push(npi.code + '' + i); //returns undefined
arr.push(npi['code' + i]); //returns your value
答案 3 :(得分:1)
首先,如果你想附加到对象键,你应该使用npi [&#39; code&#39; + i]而不是npi.code + i。因为npi.code + i意味着将(i)的值附加到npi中的键(代码)的值,这不存在。
其次,你应该从i = 1而不是i = 0开始循环。这样循环以npi开始[&#39; code1&#39;]而不是npi [&#39; code0&#39;]它也不存在。
此外,循环条件应为i <1。 4而不是i&lt; 3使得循环在i = 3而不是i = 2
之后结束var arr = [];
for (var i = 1 ; i < 4 ; i++) {
arr.push(npi['code' + i]);
}
console.log(arr);
答案 4 :(得分:0)
试试这个
var arr = [];
for (var i =0;i< 3;i++) {
arr.push(npi['code'+i]);
}