immutable js flat zip两个列表

时间:2017-03-16 11:18:49

标签: javascript immutable.js

如果我有两个不可变列表,

const a = [1,2,3];
const b = [a,b,c,d];

有一种简单的方法可以合并/压缩它们以产生:

const c = [1,a,2,b,3,c,d];

3 个答案:

答案 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)