【问题标题】:Find nested property from ember lodash and pick the value从 ember lodash 中查找嵌套属性并选择值
【发布时间】:2019-07-03 12:49:40
【问题描述】:

我是 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"
            }
        ]
    }
}]

在这里,我想查找是否有任何项目存在 ContactListcontacts。如果存在,则取出该项目并将其放入单独的列表中。

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

【问题讨论】:

  • 您要ContactList 还是带有ContactList 的项目? bookInfo.bookChunks 对数组中的每个对象都有价值吗?
  • 我想写一个 2-Utility 方法,它应该返回布尔状态 contactList 存在。另一种方法应该只返回带有contactList的项目。

标签: javascript jquery ember.js lodash


【解决方案1】:

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

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 不会未定义。否则您必须在使用嵌套属性之前添加未定义检查)

【讨论】:

  • 非常感谢您的及时帮助...如果值存在,如何返回布尔值?
  • @VelNaga 我在答案中添加了这一点。将input.filter 替换为input.some
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
相关资源
最近更新 更多