首页 > 解决方案 > 如何迭代嵌套对象并返回属性为“某物”的所有值

问题描述

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

例如:

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,但似乎无法正确使用。任何回应将不胜感激!

标签: javascript

解决方案


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

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

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"))


推荐阅读