如果我有两个JavaScript数组。
const a = [null,null,{a:1}];
const b = [{c:3},null,{a:3,b:2}];
我想要一个可以返回以下结果的函数。
[{c:3},null,{a:3,b:2}]
以上内容仍然适用于以下内容。
const a = [];
const b = [null,null,{t:4}];
我想得到以下结果。
[null,null,{t:4}]
有人可以帮助我吗?谢谢!
答案 0 :(得分:3)
您似乎想合并那些在输入数组中具有相同索引的对象:
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}]));
答案 1 :(得分:2)
您也可以通过检查falsy值来合并项目。
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; }
答案 2 :(得分:1)
const a = [];
const b = [null,null,{t:4}];
const c = [...a, ...b];
console.log(c);
如何使用http://lavaan.ugent.be/tutorial/syntax2.html运算符?
您还可以像这样使用spread方法合并两个数组
const a = [];
const b = [null,null,{t:4}];
const c = a.concat(b);
console.log(c)
答案 3 :(得分:1)
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);
答案 4 :(得分:1)
我喜欢将处理分为两部分:
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]))
。)< / p>
combine
使用处理四种情况的函数调用此函数:a null
/ b null
,a null / b non-null
,a non-null / b null
和a non-null / b non-null
,使用或组合提供的值。
zipWith
是一个非常可重用的功能,您可能会在应用程序的其他地方发现有用的功能。 combine
专门针对这种情况。