我有两个数组。一个带有对象数组,另一个带有普通数组。
需要从第一个数组的所有级别中搜索第一个数组。
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), [])
答案 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中。