检查JS对象是否包含Array

时间:2017-01-25 21:05:05

标签: javascript

我有一个名为Attr的属性的JS对象,它可能包含不同的属性数组,例如Color[]Manufacturer[]Brands[]等。

如何检查Attr是否包含给定的属性数组? 例如,如何检查Attr是否包含Color[]

我尝试了这个但是没有用:

if (Attr.hasOwnProperty('Color')) { 
    console.log("Has Colors array")
}

enter image description here

3 个答案:

答案 0 :(得分:1)

您必须检查Color数组是否存在,并且它是array。假设Attr=attrs[0](根据您的更新)。

if (Attr.Color!=undefined && Array.isArray(Attr)) { 
     console.log("Has Colors array");
}

答案 1 :(得分:1)

由于attrs本身就是一个对象数组,因此您需要在解决方案中关闭,但需要再降低一个级别。

要检查attrs中的第一个对象(即,attr[0] ...您是否可以显然循环并使用类似attr[i]之类的东西)是否有一个给定的数组,你会最好使用这种方法:

if (attrs[0].hasOwnProperty("Color")) {
    . . . do something . . .
}

。 。 。或者,甚至:

if (attrs[0].Color !== undefined) {
    . . . do something . . .
}

两者都可以工作,两者都可能更适合不同的情况(例如,如果您将数组的名称作为变量传递,则第一个可能更好,如果您检查特定的数组名称则第二个可能更好)。

<强>更新

对于记录,根据屏幕截图中显示的内容,您attr变量的结构为:

attr = [
    {
        AspectRatio: [...],
        Binding: [...],
        Brand: [...],
        Color: [...],
        EAN: [...],
        EANList: [...]
    }
]

这应该更好地说明为什么在进行检查之前必须再降低一级。

答案 2 :(得分:0)

您可以使用Array.isArray函数来检查Color是否为数组。同样作为gaurd条件,您可以检查Color属性是否存在。从您更新的帖子中,您可以忽略该检查。

 if (attrs[0].Color &&  Array.isArray(attrs[0].Color) ) { 

    console.log("Has Colors array")
}