Javascript for loop get key and push



我有一个如下代码。基本上,如果密钥是其中任何一个,我会将其推送到$scope.mykey

for (var i = 0; i < response.data.length; i++) { 
var allKeys = Object.keys(response.data[i])
for (var k = 0; k < allKeys.length; k++) {
if (allKeys[k] == "ABC" ||
allKeys[k] == "EFG" ||
allKeys[k] == "HIG" ||
allKeys[k] == "KAY" ||
allKeys[k] == "LOP" ||
allKeys[k] == "LLP" ||
allKeys[k] == "JYP" ||
allKeys[k] == "TWC" ||
allKeys[k] == "ZHG" ||
allKeys[k] == "LMD" ||
allKeys[k] == "PKL" ||
allKeys[k] == "JIB" ||
allKeys[k] == "MHT") {
$scope.mykey.push({
name: allKeys[k],
checked: response.data[i].allKeys[k]
});
}
}

但是,我收到错误

"Cannot read property '7' of undefined

我认为这与name:checked:有关。例如,它应该是这样的:

response.data[i].TWC

但现在我认为它正在得到:

response.data[i].allKeys[7]

有人知道我该如何做到这一点吗?

您收到此错误是因为response.data[i]没有属性allKeys
如果要使用字符串存储在allKeys[k]中的键访问属性,请使用:

response.data[i][allKeys[k]]

作为旁注,我建议使用forEach循环来提高可读性:

response.data.forEach(function(data) {
var allKeys = Object.keys(data);
allKeys.forEach(function(key){
if (key == "ABC" || key == "EFG" || /*...*/ ) {
$scope.mykey.push({ name: key, checked: data[key] });
}
});
});

response.data.map((allKeys)=> {
let acceptedKeys = ["ABC","EFG","HIG","KAY", "LOP"];
allKeys.forEach((key, index, allKeys)=>{
if(acceptedKeys.includes(key)){
$scope.mykey.push({
name: key,
checked: key
});
}
})
})

最新更新