Чтобы сохранить динамику, просто используйте:
(<any>window).MyNamespace
Похоже, вы хотите объединить те объекты, которые имеют одинаковый индекс во входных массивах:
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}]));
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)
Оператор 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);
Мне нравится разбивать обработку на две части:
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]))
.)
combine
вызывает это с помощью функции, которая обрабатывает четыре случая: a null
/ b null
, a null / b non-null
, a non-null / b null
и a non-null / b non-null
, используя или комбинируя предоставленные значения.
zipWith
- это многократно используемая функция, которая может оказаться полезной в других местах вашего приложения. combine
более конкретно относится к этому случаю.
Вы можете объединить элементы, проверив также ложное значение.
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; }