搜索数组并找到对象数组中的所有值

时间:2019-12-21 22:29:57

标签: javascript lodash

我有两个数组。一个带有对象数组,另一个带有普通数组。

需要从第一个数组的所有级别中搜索第一个数组。

let arr1 = [{"LEVEL":1},{"LEVEL":2},{"LEVEL":3,"POSITION":"FCONTROLLER"}, 
            {"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"},{"LEVEL":6},{"LEVEL":7,"POSITION":"EGM"}]

let arr2 = [1,3,5]

输出:

 ["FCONTROLLER","GM","GMH"]

我尝试使用reduce方法,但结果为空。

  arr2.reduce((a, o) => (o.merged==='1'||o.merged==='3'||o.merged==='5' && a.push(o.value), a), [])

2 个答案:

答案 0 :(得分:1)

在减少arr1时,请检查当前对象是否具有POSITION值,以及其LEVEL是否包含在arr2中。如果两者均为true,则将其推入累加器:

const arr1 = [{"LEVEL":1},{"LEVEL":2},{"LEVEL":3,"POSITION":"FCONTROLLER"}, 
            {"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"},{"LEVEL":6},{"LEVEL":7,"POSITION":"EGM"}]

const arr2 = [1,3,5]

const result = arr1.reduce((r, o) => {
  if(o.POSITION && arr2.includes(o.LEVEL)) {
    r.push(o.POSITION)
  }
  
  return r
}, [])

console.log(result)

答案 1 :(得分:1)

您可以使用indexOf在arr2中搜索所需元素级别的索引,以防万一,应该返回该对象,例如:

 let arr1 = [{"LEVEL":1},{"LEVEL":2},{"LEVEL":3,"POSITION":"FCONTROLLER"}, 
            {"LEVEL":4,"POSITION":"RGM"},{"LEVEL":5,"POSITION":"GM"},{"LEVEL":5,"POSITION":"GMH"},{"LEVEL":6},{"LEVEL":7,"POSITION":"EGM"}]

 let arr2 = [1,3,5]

const output =arr1.filter((item) => {
  return arr2.indexOf(item.LEVEL) !== -1
});

它将返回该对象的每个对象。LEVEL位于arr2中。