Найдите вложенное свойство в Ember Lodash и выберите значение - PullRequest
0 голосов
/ 03 июля 2019

Я новичок в 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 или контактов . Если он есть, возьмите предмет и поместите в отдельный список.

Я использую ember-lodash. Использование обычного JavaScript или Lodash было бы хорошо для меня. Любая помощь будет по достоинству оценена.

1 Ответ

1 голос
/ 03 июля 2019

Вы можете использовать filter и some.Это возвращает все объекты, у которых есть хотя бы один объект со свойством 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 не будет неопределенным. В противном случае вам придется добавить неопределенную проверку перед использованием вложенного свойства)

...