Как сравнить два массива объектов в javascript и обновить значение? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть два массива объектов, подобных этому

let array1 = [{
    id:1,
    colorCode:2
}]

let array2 = [{
    id:1,
    value:3
}]

Вот чего я хочу достичь. Мне нужно сравнить эти два массива и их идентификаторы одинаковы. Мне нужно изменить значение colorCode в зависимости от value. Пожалуйста, помогите мне достичь этого. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 02 мая 2020

U может использовать отображение

var array1 = [{ id:1, colorCode:2},{id:2, colorCode:2}];
let array2 = [{ id:1, value:3},{id:2, value:4}];
var arr=[];
array1.map(id =>       
   arr.push({id:id.id,colorCode: array2.find(o => o.id === id.id).value})
 );
console.log(arr);
0 голосов
/ 02 мая 2020

Создать функцию, используя _.flow(). Функция объединяет массивы, _.groupBy() клавишу (id), а затем _.map() группы и _.merge() каждую группу:

const { flow, concat, groupBy, map, merge } = _;

const combineBy = key => flow(
  concat,
  arr => groupBy(arr, key),
  groups => map(groups, g => merge({}, ...g))
)

const array1 = [{ id:1, colorCode:2},{id:2, colorCode:2}];
const array2 = [{ id:1, value:3},{id:2, value:4}];

const combineById = combineBy('id');

const result = combineById(array1, array2);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

Та же идея еще проще с lodash / fp. Просто замените _.merge() на _.mergeAll():

const { flow, concat, groupBy, map, mergeAll } = _;

const combineBy = key => flow(concat, groupBy(key), map(mergeAll))

const array1 = [{ id:1, colorCode:2},{id:2, colorCode:2}];
const array2 = [{ id:1, value:3},{id:2, value:4}];

const combineById = combineBy('id');

const result = combineById(array1, array2);

console.log(result);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
...