首页 > 解决方案 > javascript 检查数组的值是否作为对象中的键存在

问题描述

我需要检测一个数组的值是否作为键存在于对象中

我试过这种方式

var color = {
             1: "Red",
             2: "Blue",
             3: "Yellow",
             4: "Violet",
             5: "Green",
             7: "Orange"
            };

var myColor = [3, 1];

for(const [key, value] of Object.entries(color)){

    var bgIco = (myColor.includes(key)) ? '[' + key + ']' + value + ' - Yes' : '[' + key + ']' + value + ' - No';

    console.log(bgIco);

}

但它总是回来不

如果在包含函数中我手动在对象中输入一个数字而不是变量,那么它可以工作,我做错了什么?

标签: javascriptarraysobject

解决方案


对象属性始终是字符串(或符号),即使在声明它们时它们看起来像数字:

const obj = { 1: 'foo' };

const key = Object.keys(obj)[0];
console.log(key === 1);
console.log(typeof key);

因此,myColor首先将数组映射到字符串:

var myColor = [3, 1].map(String);

否则,includes检查将失败(因为includes需要===- 或 SameValueZero - 才能找到匹配项)


推荐阅读