从灰烬lodash查找嵌套属性并选择值

时间:2019-07-03 12:49:40

标签: javascript jquery ember.js lodash

我是javascript新手。

我想检查特定的嵌套属性是否存在于项目数组中,例如)

[{
    "_id" : ObjectId("5c4ec057e21b840001968d31"),
    "status" : "ACTIVE",
    "customerId" : "sample-book",
    "bookInfo" : {
        "bookChunks" : [ 
            {
                "key" : "Name",
                "value" : "test"
            }, 
            {
                "key" : "Surname1",
                "value" : "testtt"
            }, 
            {
                "key" : "user-contact",
                "value" : "sample-value",
                "ContactList" : {
                    "id" : "sample-id",
                    "timeStamp" : "Tue, 20 Sep 2016 07:49:25 +0000",
                    "contacts" : [ 
                        {
                            "id" : "contact-id1",
                            "name" : "Max Muller",
                            "phone_number" : "+XXXXXXX"
                        }, 
                        {
                            "id" : "contact-id2",
                            "name" : "Max Muller",
                            "phone_number" : "+XXXXXXX"
                        }
                    ]
                }
            }
        ]
    }
},
{
    "_id" : ObjectId("5c4ec057e21b840001968d32"),
    "status" : "ACTIVE",
    "customerId" : "sample-book1",
    "bookInfo" : {
        "bookChunks" : [ 
            {
                "key" : "Name",
                "value" : "test"
            }, 
            {
                "key" : "Surname1",
                "value" : "testtt"
            }
        ]
    }
}]

在这里,我想查找是否有 ContactList contacts 存在。如果有的话,请将该商品放入单独的列表中。

我正在使用ember-lodash。使用普通的javascript或lodash对我来说很好。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用filtersome。这将返回所有在ContactList数组中具有至少一个具有bookInfo.bookChunks属性的对象的对象。

const input=[{"_id":"5c4ec057e21b840001968d31","status":"ACTIVE","customerId":"sample-book","bookInfo":{"bookChunks":[{"key":"Name","value":"test"},{"key":"Surname1","value":"testtt"},{"key":"user-contact","value":"sample-value","ContactList":{"id":"sample-id","timeStamp":"Tue, 20 Sep 2016 07:49:25 +0000","contacts":[{"id":"contact-id1","name":"Max Muller","phone_number":"+XXXXXXX"},{"id":"contact-id2","name":"Max Muller","phone_number":"+XXXXXXX"}]}}]}},{"_id":"5c4ec057e21b840001968d32","status":"ACTIVE","customerId":"sample-book1","bookInfo":{"bookChunks":[{"key":"Name","value":"test"},{"key":"Surname1","value":"testtt"}]}}]

const output = input.filter(o => 
  o.bookInfo.bookChunks.some(c => "ContactList" in c)
)

console.log(output)

如果您只想检查是否有任何对象具有ContactList,则可以将filter替换为另一个some

(注意:这假定bookInfo.bookChunks不会是未定义的。否则,在使用嵌套属性之前,您必须添加未定义的检查)