【问题标题】:How do I iterate a nested object and return all values where property is "something"如何迭代嵌套对象并返回属性为“某物”的所有值
【发布时间】:2021-01-10 17:09:15
【问题描述】:

我想知道从具有某些特定属性的嵌套对象返回值数组的最简单方法。给定的对象在整个地方都有许多同名的属性,请记住我的对象非常大,并且没有模式可以重复该属性..

例如:

var object = {
    car : { price : "100" },
    lot : { bike : { one : { price : "4" }, two { price : "16" } } }
    bread : { crust : { price : "2" } }
}

findAllValues( object, "price" ) // returns array ["100", "4", "16", "2"]

我尝试使用一些库,例如 lodash,但似乎无法正确使用。任何回应将不胜感激!

【问题讨论】:

  • 你也可以有一个数组xyz: [{foo: 1}, {price: 0}] 吗?
  • 展示你的尝试。

标签: javascript


【解决方案1】:

您可以使用递归函数来递归您的对象并返回一个数组。

您可以使用以下功能;您所要做的就是传递一个对象和要匹配的属性。

const object = {
    car : { price : "100" },
    lot : { bike : { one : { price : "4" }, two : { price : "16" } } },
    bread : { crust : { price : "2" } }
}


const findAllValues = (obj, match) => {
  const res = []
  const recurse = (obj) => {
    for (const key in obj) {
      const value = obj[key]
      if (value !== undefined) {
        if (value && typeof value === 'object') {
          recurse(value, key)
        } else {
          if (key === match) {
            res.push(value)
          }
        }
      }
    }
  }
  recurse(obj)
  return res
}

console.log(findAllValues(object, "price"))

【讨论】:

  • 非常感谢!!我唯一注意到的是“当前”没有被使用。
【解决方案2】:

在这个解决方案中,我们使用 deepSearch 函数递归地向下搜索任意对象,如果有与我们提供的 key 匹配的键,我们将其附加到提供的数组中。

const object = {
    car : { price : "100" },
    lot : { bike : { one : { price : "4" }, two : { price : "16" } } },
    bread : { crust : { price : "2" } }
}

console.log(findAllValues(object, "price"));

function findAllValues(object, key) {
  const arr = [];
  deepSearch(object, key, arr);
  return arr;
}

function deepSearch(obj, key, array) {
  Object.entries(obj).forEach(([k, value]) => {
    if (k === key) {
      array.push(value);
    } else if (typeof value === "object") {
      deepSearch(value, key, array);
    }
  })
}

【讨论】:

  • 非常感谢!!
猜你喜欢
  • 2019-01-20
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2022-07-14
  • 2022-01-20
  • 2019-08-05
相关资源
最近更新 更多