数组与对象转换的问题

一个数组中有多个对象,每个对象中包含子级数组,把每个对象的子级数组存到一个新数组中

阅读 2.1k
4 个回答
arr2 = arr.reduce((cur, next) => {
  return cur.concat(next.children)
}, [])
arr.reduce((result, current)=>result.concat(current.children), [])
let newArr = [];
arr.forEach((element) => {
    if (typeof element === 'object') { // [] => object
        for (const attr in element) {
            const value = element[attr];
            if (Array.isArray(value)) { // [] => object => []
                newArr.push(value);
            }
        }
    }
});
console.log(newArr);
var array = [{
  "name": "lishi",
  "friends": [{
    "name": "lishi1",
    "friends": [{
      "name": "lishi2",
      "friends": [{
        "name": "lishi3",
        "friends": []
      }]
    },
    {
      "name": "lishi4",
      "friends": []
    }]
  },
  {
    "name": "lishi5",
    "friends": []
  }]
},
{
  "name": "wanger",
  "friends": [{
    "name": "wangwu"
  }]
},
{
  "name": "zhangsan",
  "friends": []
}];

题主没有贴出数据具体是什么结构,假设是上面的结构(一个数组中有多个对象,每个对象中包含子级数组),拿出所有的friends数组中的对象,递归处理下就可以了。

var result = [];
function selectAllFriends(arr) {
  for (var i = 0; i < arr.length; i++) {
    if (!arr[i].friends || arr[i].friends.length < 1) {
      continue;
    }
    selectAllFriends(arr[i].friends);
    result = result.concat(arr[i].friends);
  }

}
selectAllFriends(array);
for (var i = 0; i < result.length; i++) {
  console.log(result[i]["name"]);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题