【问题标题】:JavaScript search for object in an object and return both's elementsJavaScript 在对象中搜索对象并返回两者的元素
【发布时间】:2018-03-31 09:00:28
【问题描述】:

我有一个这样的对象:

{
    "Peter": {
        "data": {
            "id": 104,
            "budget": 3400
        },
        "items": {
            "shoes": {
                "sales": 72,
                "intake": 576
            },
            "books": {
                "sales": 14,
                "intake": 70
            } 
        }
    },
    "Bradley": {...}
}

Peter 对象以其他名称重复多次。

现在我想搜索让我们说books

如果在对象的某处找到books,它应该返回找到的对象books 中的元素及其值。

我还想知道在哪个 Grandobject books 中找到了。所以在这种情况下它应该返回Peter

如果在多个对象中找到books,它应该以数组的形式返回结果。

我知道如何通过使用 find() 方法搜索其属性之一来获取对象,但我想知道当您搜索的对象具有您以前不知道的名称时,您是如何做到的.

【问题讨论】:

  • 对,你试过什么?
  • 我尝试了find() 方法,但我不知道如何布局整个事情以使其按我描述的那样工作。
  • 请在问题中添加您可能尝试过的任何内容。请添加为什么也不起作用。
  • @CodingBobby 请更新您的问题并包括您的尝试。如果不向他们展示,您的问题似乎是在要求某人为您写作。

标签: javascript object search


【解决方案1】:

Object.entries()Array.prototype.filter()Array.prototype.every()Object.values() 可以组合构造一个仅由 peoplepredicated items 组成的 array

请参阅下面的实际示例。

// Input.
const people = {"Peter": {"data": {"id": 104, "budget": 3400}, "items": {"shoes": {"sales": 72, "intake": 576}, "books": {"sales": 14, "intake": 70 }}}}

// People With.
const peopleWith = (o, ...p) => Object.entries(o).filter(([person, attributes]) => p.every(x => Object.values(attributes.items[x] || {}).length))

// Output.
const positive = peopleWith(people, 'books')
console.log('Found', positive) // [[person, attributes] ...]
const compound = peopleWith(people, 'books', 'shoes')
console.log('Compound', compound) // People with books and shoes.
const negative = peopleWith(people, 'books', 'shoes', 'hats')
console.log('None Found', negative) // []

【讨论】:

  • 我以前不知道entries() 方法,但这有助于我理解它是如何工作的。
  • @CodingBobby 参考此Object.entries()。它将帮助您了解Object.entries()
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 2018-11-14
相关资源
最近更新 更多