Javascript数组包括

时间:2018-05-10 16:27:21

标签: javascript

我正在尝试使用以下代码行来确定数组是否包含特定索引:

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。

上面的代码因此无法正常工作,有没有人知道什么导致它响应错误的布尔值?

我感谢任何建议!

3 个答案:

答案 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);
})