Javascript 合并两个数组的更好方法

Javascript 合并两个数组的更好方法,javascript,arrays,object,ecmascript-6,ecmascript-2016,Javascript,Arrays,Object,Ecmascript 6,Ecmascript 2016,我正在尝试让这段代码运行得更实用一些 我想根据列表中的姓名选择过滤一组数据,然后根据每个人的报告递归查找他们的直线经理,但前提是排名大于3 这是可行的,但是有没有更好更简洁的方法来达到同样的效果 const数据=[ { 姓名:'彼得', 报告至:'', 排名:1 }, { 名字:“汤姆”, 记者:'彼得', 排名:2 }, { 姓名:'玛丽亚', 记者:“汤姆”, 排名:3 }, { 姓名:“Liam”, 记者:玛丽亚, 排名:4 }, { 姓名:'约翰', 记者:'彼得', 排名:3 },

我正在尝试让这段代码运行得更实用一些

我想根据
列表中的姓名选择过滤一组数据,然后根据每个人的
报告递归查找他们的直线经理,但前提是
排名
大于3

这是可行的,但是有没有更好更简洁的方法来达到同样的效果

const数据=[
{
姓名:'彼得',
报告至:'',
排名:1
},
{
名字:“汤姆”,
记者:'彼得',
排名:2
},
{
姓名:'玛丽亚',
记者:“汤姆”,
排名:3
},
{
姓名:“Liam”,
记者:玛丽亚,
排名:4
},
{
姓名:'约翰',
记者:'彼得',
排名:3
},
{
姓名:“菲奥娜”,
记者:“利亚姆”,
排名:5
}
]
//只从这些名字开始
常数列表=['Fiona','Tom']
const filtered=data.filter(({Name})=>list.includes(Name))
//如果排名不低于3,则递归查找缺少的列表名称管理器
const findManager=(管理器)=>{
const next=data.find(({Name})=>Name==manager)
返回下一个。排名>3
?[next,…findManager(next.ReportsTo)]
:[下一页]
}
//检查筛选数组的行管理器并存储它们
const missingManagers=[]
for(已过滤的常量{ReportsTo,秩}){
如果(!list.includes(ReportsTo)&&Rank>3){
缺少管理器。推送(…findManager(ReportsTo))
}
}
//将缺少的管理器与筛选列表合并
常量结果=[…缺少管理器,…已筛选]
console.log(结果)
。作为控制台包装{max height:100%!important;top:0;}
首先,请注意和有不同的用途

这有点让人困惑,但如果我理解的话,你想提取经理和所有排名>4的人(经理还是非经理)

const数据=[
{
姓名:“彼得”,
报告至:“,
排名:1,
},
{
姓名:“汤姆”,
记者:“彼得”,
排名:2,
},
{
姓名:“玛丽亚”,
记者:“汤姆”,
排名:3,
},
{
姓名:“利亚姆”,
报道:“玛丽亚”,
排名:4,
},
{
姓名:“约翰”,
记者:“彼得”,
排名:3,
},
{
姓名:“菲奥娜”,
报告:“利亚姆”,
排名:5,
},
];
常量管理器=[];
data.forEach((元素)=>{
if(element.ReportsTo&&!managers.includes(element.ReportsTo)){
managers.push(element.ReportsTo);
}
});
const filtered=data.filter((元素)=>{
if(managers.includes(element.Name)| | managers.includes(element.ReportsTo)| | element.Rank>3)返回元素;
返回false;
});
console.log(过滤);
试试这个

getLineManagersAboveRankThree() {
    return data.filter(person => person.Rank >= 3 &&
                                 data.some(({ReportsTo}) => ReportsTo === person.Name)
                      );
}
当集合中的任何一个元素满足条件时,方法
some
将返回
true
。因此,您可以在
数据
列表中查找某个人的直线经理


这在时间复杂度方面有点贵,但根据需求很简单。

我找到了这个解决方案,但仍然不确定它是否是一个更好的解决方案

const result = filtered.reduce((total, current) => {
  if(!list.includes(current.ReportsTo) && current.Rank > 3) {
    total.push(
      current,
      ...findManager(current.ReportsTo)
    )
  } else total.push(current)
  
  return total

}, [])

不,我想做的是代码片段所做的,我只是想知道我是否可以在不使用for循环的情况下完成它,而只是映射到过滤器数组上。。。对不起,代码太乱了。你的主要目标是什么?要筛选哪些元素?必备条件是什么?