4 回答

TA貢獻1776條經(jīng)驗 獲得超12個贊
您可以避免使用for..in迭代數(shù)組?;蛘?,您可以reduce在arrayOfNumbersIHave&上 使用,每個迭代curr參數(shù)將代表的每個元素 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條經(jīng)驗 獲得超6個贊
以這種方式使用in運算符并不完全正確。 in檢查對象的屬性或數(shù)組的索引。因此,true僅當您要檢查的數(shù)字恰好是數(shù)組中的索引時,它才可能返回。
因此,在這種情況下,您確實要忽略Object.keys,而是使用:
for (const i in arrayOfNumbersIHave) {
if (arrayOfNumbersIHave[i] in snapObject) {
objToDisplay[arrayOfNumbersIHave[i]] = snapObject[arrayOfNumbersIHave[i]]
}
}
就像@adiga在下面指出的那樣,我們可以通過for...of循環(huán)簡化此過程,以得到:
for (const val of arrayOfNumbersIHave) {
if (val in snapObject) {
objToDisplay[val] = snapObject[val];
}
}

TA貢獻1824條經(jīng)驗 獲得超6個贊
您需要檢查數(shù)組的值(如果它在對象中),而不是通過獲取索引來檢查索引的值是否在數(shù)組中。
這條線
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);
添加回答
舉報