-
叮当猫咪
您可以避免使用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)
-
呼啦一阵风
以这种方式使用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]; }}
-
慕妹3242003
您需要检查数组的值(如果它在对象中),而不是通过获取索引来检查索引的值是否在数组中。这条线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);