如何从具有嵌套对象数组的对象数组中获取所有特定值?

Posted

技术标签:

【中文标题】如何从具有嵌套对象数组的对象数组中获取所有特定值?【英文标题】:How to get all specific values from an array of objects with nested arrays of objects? 【发布时间】:2020-07-20 23:08:00 【问题描述】:

我有一个数组:

   const arr = [
  
    name: "name 1",
    dontShow: true,
    children: [
      
        name: "name 2",
        key4: 4,
        dontShow: false,
        children: [],
      ,
    ],
  ,
  
    name: "name 3",
    dontShow: false,
    children: [
      
        name: "name 4",
        dontShow: true,
        children: [
          
            name: "name 5",
            dontShow: false,
            children: null,
          ,
        ],
      ,
    ],
  ,
];

我需要每个对象的名称数组,除了具有属性dontShow: true 的对象 所以从那个例子中我会期待这样的数组:

["name2", "name3", "name5"]

基本上,我需要从树状结构中获取一个平面数组,lodash/下划线解决方案也很棒,我只是没有找到它们

【问题讨论】:

到目前为止你尝试了什么? 我尝试使用我的大脑但它完全没有希望,我想这里有一些递归函数会很棒 请张贴您到目前为止尝试过的代码? 【参考方案1】:

你可以使用递归函数

const arr = [ name: "name 1", dontShow: true, children: [  name:"name 2", key4: 4, dontShow: false, children: [], , ],,name: "name 3",dontShow: false,children: [ name: "name 4", dontShow: true, children: [ name: "name 5", dontShow: false, children: null,,],, ],,];

let final = (arr, result = []) => 
  if (Array.isArray(arr)) 
    arr.forEach(obj => 
      if (!obj.dontShow) 
        result.push(obj.name)
      
      if (Array.isArray(obj.children)) 
        final(obj.children, result)
      
    )
  
  return result


console.log(final(arr))

【讨论】:

【参考方案2】:

您可以通过查看dontShow 获得一组平面名称。

const
    getNames = array => array.flatMap(( name, dontShow, children ) => [
        ...(dontShow ? [] : [name]),
        ...getNames(children || [])
    ]),
    array = [ name: "name 1", dontShow: true, children: [ name: "name 2", key4: 4, dontShow: false, children: [] ] ,  name: "name 3", dontShow: false, children: [ name: "name 4", dontShow: true, children: [ name: "name 5", dontShow: false, children: null, ] ] ],
    result = getNames(array);

console.log(result);

【讨论】:

以上是关于如何从具有嵌套对象数组的对象数组中获取所有特定值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

从嵌套的对象数组中提取所有特定属性

从嵌套属性数组中获取对象嵌套值

如何使用把手 (hbs) 迭代嵌套数组和对象?

Meteor JS如何从集合中的数组中获取特定对象?

寻求有关如何从特定数组中获取所有过滤列表的帮助