Ваш код на самом деле мутирует a[0]
. Однако, если вы хотите изменить первый элемент, достаточно просто a
mergeWith(...a, fn)
:
let a = [{a: [1,2]}, {a:[3,4]}, {a: [7,8]}]
let b = _.mergeWith(
...a,
(objValue, srcValue) => _.isArray(objValue) ? objValue.concat(srcValue) : undefined,
);
console.log(b); // result: {a:[1,2,3,4,7,8]}
console.log(a[0]); // result: {a:[1,2,3,4,7,8]}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Если вы не хотите мутировать 1-й элемент массива, разверните в новый объект mergeWith({}, ...a, fn)
:
let a = [{a: [1,2]}, {a:[3,4]}, {a: [7,8]}]
let b = _.mergeWith(
{}, // new object
...a,
(objValue, srcValue) => _.isArray(objValue) ? objValue.concat(srcValue) : undefined,
);
console.log(b); // result: {a:[1,2,3,4,7,8]}
console.log(a[0]); // result: {a:[1,2]}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>