Объединить два массива, которые включают нуль и элемент объекта?

Чтобы сохранить динамику, просто используйте:

(<any>window).MyNamespace
-1
задан KHman 11 March 2019 в 14:17
поделиться

5 ответов

Похоже, вы хотите объединить те объекты, которые имеют одинаковый индекс во входных массивах:

function merge(a, b) {
    const merged = [];
    for (let i = 0; i < a.length || i < b.length; i++) {
        merged.push(a[i] && b[i] ? {...a[i], ...b[i]} : a[i] || b[i]);
    }
    return merged;
}

console.log(merge([null,null,{a:1}], [{c:3},null,{a:3,b:2}]));
console.log(merge([], [null,null,{t:4}]));

0
ответ дан trincot 11 March 2019 в 14:17
поделиться

const a = [];
const b = [null,null,{t:4}];

const c = [...a, ...b];

console.log(c);

Как насчет использования оператора spread ?

Вы также можете использовать метод concat для объединения двух массивов, например,

const a = [];
const b = [null,null,{t:4}];

const c = a.concat(b);
console.log(c)

0
ответ дан Abdel 11 March 2019 в 14:17
поделиться

Оператор Concat или Spread должен сделать это ..

const a1 = [];
const b1 = [null,null,{t:4}];
const result1 = [...a1, ...b1];
console.log(result1);

const a2 = [null,null,{a:1}];
const b2 = [{c:3},null,{a:3,b:2}];
const result2 = [...a2, ...b2];
console.log(result2);

0
ответ дан Terry Lennox 11 March 2019 в 14:17
поделиться

Мне нравится разбивать обработку на две части:

const zipWith = (fn) => (a, b) => [...Array(Math.max(a.length, b.length))]
  .map((_, i) => fn(a[i], b[i]))

const combine = zipWith ((a, b) => 
  a && b ? {...a, ...b} : a ? {...a} : b ? {...b} : null)

console.log(combine([null, null, {a: 1}], [{c: 3}, null, {a: 3, b: 2}]))
console.log(combine([], [null, null, {t: 4}]))
.as-console-wrapper { max-height: 100% !important; top: 0; }

«zip» является общее имя для функции, которая объединяет два массива, индекс за индексом. Иногда «zipWith» используется для расширения, которое принимает функцию для решения, как объединить эти два значения. Эта версия zipWith немного сложнее, чем другие варианты, так как она использует большую длину двух входных массивов, а не только длину первого (что может быть записано zip = (fn) => (a1, a2) => a1.map((a, i) => fn(a, a2[i])).)

[1119 ] combine вызывает это с помощью функции, которая обрабатывает четыре случая: a null / b null, a null / b non-null, a non-null / b null и a non-null / b non-null, используя или комбинируя предоставленные значения.

zipWith - это многократно используемая функция, которая может оказаться полезной в других местах вашего приложения. combine более конкретно относится к этому случаю.

0
ответ дан Scott Sauyet 11 March 2019 в 14:17
поделиться

Вы можете объединить элементы, проверив также ложное значение.

const
    merge = (...a) => a.reduce(
        (r, a) => (a.forEach((o, i) => r[i] = o || r[i] || !r[i] && o), r),
        []
    );

console.log(merge([null, null, { a: 1 }], [{ c: 3 }, null, { a: 3, b: 2 }]));
console.log(merge([], [null, null, { t: 4 }]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

0
ответ дан Nina Scholz 11 March 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: