4 回答

TA贡献1776条经验 获得超12个赞
您可以避免使用for..in迭代数组。或者,您可以reduce在arrayOfNumbersIHave&上 使用,每个迭代curr参数将代表的每个元素 arrayOfNumbersIHave。使用它curr来检查中是否存在相同名称的密钥 snapObject。是这样然后在累加器对象中添加键和值
let arrayOfNumbersIHave = [
"542009988",
"7411111111",
"542261111",
"542009988",
"7411111111",
"7411111111",
"7442334675",
"661766029",
"692549335",
]
let snapObject = {
"542009988": "A",
"542261111": "B",
"661766029": "C",
"6617666029": "D",
"692549335": "E",
"7442334675": "F",
"7411111111": "G",
}
let objToDisplay = arrayOfNumbersIHave.reduce(function(acc, curr) {
if (snapObject[curr]) {
acc[curr] = snapObject[curr]
}
return acc;
}, {}) // {} is accumulator object
console.log(objToDisplay)

TA贡献1802条经验 获得超6个赞
以这种方式使用in运算符并不完全正确。 in检查对象的属性或数组的索引。因此,true仅当您要检查的数字恰好是数组中的索引时,它才可能返回。
因此,在这种情况下,您确实要忽略Object.keys,而是使用:
for (const i in arrayOfNumbersIHave) {
if (arrayOfNumbersIHave[i] in snapObject) {
objToDisplay[arrayOfNumbersIHave[i]] = snapObject[arrayOfNumbersIHave[i]]
}
}
就像@adiga在下面指出的那样,我们可以通过for...of循环简化此过程,以得到:
for (const val of arrayOfNumbersIHave) {
if (val in snapObject) {
objToDisplay[val] = snapObject[val];
}
}

TA贡献1824条经验 获得超6个赞
您需要检查数组的值(如果它在对象中),而不是通过获取索引来检查索引的值是否在数组中。
这条线
if (arrayOfNumbersIHave[i] in snapObject) {
将arrayOfNumbersIHave[i]as的值用作与in运算符和对象进行检查的键。
var arrayOfNumbersIHave = ["542009988", "7411111111", "542261111", "542009988", "7411111111", "7411111111", "7442334675", "661766029", "692549335"],
snapObject = { 542009988: "A", 542261111: "B", 661766029: "C", 6617666029: "D", 692549335: "E", 7442334675: "F", 7411111111: "G" },
objToDisplay = {};
for (const i in arrayOfNumbersIHave) {
if (arrayOfNumbersIHave[i] in snapObject) {
objToDisplay[arrayOfNumbersIHave[i]] = snapObject[arrayOfNumbersIHave[i]];
}
}
console.log(objToDisplay);
添加回答
举报