Как я могу получить уникальный набор из двух массивов, который удаляет второе вхождение элемента по значению ключа, а не первое, как это делает Lodash uniqueBy? - PullRequest
0 голосов
/ 01 июня 2018

Итак, если у меня есть два массива ...

const arr1 = [ { id: 1: newBid: true } ];

const arr2 = [ { id: 1, newBid: false }, { id: 2, newBid: false } ];

Я хочу получить массив, подобный этому

[ { id: 1, newBid: false }, { id: 2, newBid: false } ]

НО ... Я хочу{ id: 1, newBid: true } от arr1, а не arr2

Я использовал Lodash uniqBy(arr1, arr2, ['id']), но он удаляет 1-е вхождение, а не 2-е

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Вы должны использовать функцию lodash mergeWith.

const arr1 = [{
  id: 1,
  newBid: true
}];

const arr2 = [{
  id: 1,
  newBid: false
}, {
  id: 2,
  newBid: false
}];

function customizer(firstValue, secondValue) {
  if(firstValue) 
      return firstValue;
  else
      return secondValue;
}

console.log(_.mergeWith(arr1, arr2, customizer));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
0 голосов
/ 01 июня 2018

Я считаю использование объекта в качестве карты самым простым способом решения подобных проблем.

const arr1 = [ { id: 1, newBid: true } ];

const arr2 = [ { id: 1, newBid: false }, { id: 2, newBid: false } ];

const map = {};

function execute(array) {
    for(let i = 0; i < array.length; i++) {
        const item = array[i];
        map[item.id] = item;
    }
}

execute(arr1);
execute(arr2);

console.log(Object.values(map))
...