Поиск в массиве и поиск всех значений в массиве объектов - PullRequest
0 голосов
/ 22 декабря 2019

У меня есть два массива. Один с массивом объектов и другой простой массив.

Необходим поиск первого массива по всем уровням первого массива.

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"]

Я пытался использоватьуменьшить метод, но дает пустой результат.

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

Ответы [ 2 ]

1 голос
/ 22 декабря 2019

Вы можете использовать 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
});

Он вернет каждый объект, которыйobject.LEVEL находится в arr2.

1 голос
/ 22 декабря 2019

При уменьшении 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)
...