我正在尝试使用以下代码行来确定数组是否包含特定索引:
var array1 = [{ "abc": 123, "def": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 2, "c": 1}]}]
console.log(array1.includes('def'));
数组包含“def”,因此如果我按以下方式定义数组,控制台应该实际返回true:
var array1 = [{ "abc": 123, "def": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 2, "c": 1}]}]
以另一种方式定义,例如:
var array1 = [{ "abc": 123 }]
应该返回false。
上面的代码因此无法正常工作,有没有人知道什么导致它响应错误的布尔值?
我感谢任何建议!
答案 0 :(得分:2)
正确的方法是array1.some(n => n.hasOwnProperty('def'))
。看到数组中没有def
,而是包含def
属性
答案 1 :(得分:0)
Array.includes
根据给定(x)
中Array
是值而不是键返回布尔值。如果您希望array1.includes('def')
返回其他部分,则必须执行Object.keys(array1[0]).includes('def')
答案 2 :(得分:-1)
这里的问题是您尝试访问对象中的元素,并且此对象位于列表中。要访问list元素,您需要指定其索引(此处为0)。然后,您可以使用Object.keys访问对象键。
var array1 = [{ "abc": 123, "def": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 2, "c": 1}]}]
Object.keys(array1[0]).forEach((element) => {
if(element === "def") console.log(true);
})