如果我有两个不可变列表,
const a = [1,2,3];
const b = [a,b,c,d];
有一种简单的方法可以合并/压缩它们以产生:
const c = [1,a,2,b,3,c,d];
答案 0 :(得分:1)
交错是否在寻找:https://facebook.github.io/immutable-js/docs/#/List/interleave
const a = List([1, 2, 3]);
const b = List([a, b, c, d]);
a.interleave(b)
答案 1 :(得分:0)
const a = [1, 2, 3]
根本不要让这个数组一成不变。 const
所做的是保证您不会重新分配a
。将项目推送或移至a
不构成重新分配。
这是使用immutable.js
:
const a = List([1, 2, 3]);
现在..回到拉链。
如果您不想要其他参考,可以在最小的列表中使用for
并自行构建zip。如果你想要一个现成的功能,你可以考虑使用Underscore's Zip,这正是你想要的。
答案 2 :(得分:0)
如果您想从头开发一个功能,那么您可以使用下面的代码。基本上,函数将两个数组合并为交错两个。考虑2个数组,array1 = [1,2,3,4]和array2 = [a,b,c,d,e,f]。然后下面的代码将输出一个新的数组[1,a,2,b,3,c,4,d,e,f]
var i = 0;
var j = 0;
var k = 0;
var len1 = array1.length;
var len2 = array2.length;
var flag = true;
var newArr = [];
//Merge the 2 arrays till the smaller sized array
while (i < len1 && j < len2)
{
if(flag){
newArr[k] = array1[i];
i++; k++;
flag = false;
}
else{
newArr[k] = array2[j];
j++; k++;
flag = true;
}
}
/* Copy the remaining elements of array1[], if there are any */
while (i < len1)
{
newArr[k] = array1[i];
i++;
k++;
}
/* Copy the remaining elements of array2[], if there are any */
while (j < len2)
{
newArr[k] = array2[j];
j++;
k++;
}
console.log(newArr)