简而言之,我想知道是否有一种方法可以更直接地做到这一点。我觉得 block 的问题是我必须创建一个新数组,然后我必须映射它,以便我只得到第一个值。有没有办法可以一次循环 2 个项目?
a = [5, 1, 6, 0, 8, 0, 9, 1, 10, 0]
b = _.chunk(a, 2)
zeros = b.filter(s=> s[1] == 0).map(s=>s[0])
ones = b.filter(s=> s[1] == 1).map(s=>s[0])
我想要的替代方案
zeros=[]
ones=[]
_.MyEach(a, 2, (l, m)=> if(m==0) zero.push(l); else ones.push(l))
OR(不太可能但可以接受)
zeros = _.MyFilter(a, 2, (l, m) => if(m==0) l else null);
ones = _.MyFilter(a, 2, (l, m) => if(m==1) l else null);
最佳答案
您可以完全不用 _
库,在本例中使用 ES6 语法,它允许一次将 2D 数组分解为单个变量:
var [zeroes, ones] = a.reduce(
(p, c, i, a) => i % 2 ? (p[c].push(a[i - 1]), p) : p, [[], []]);
这会迭代数组一次,对于奇数元素,它会查看其中包含的零或一,并将前面的值放入 [0]
或 [1]
种子数组的元素。
关于javascript - 一次使用两个或多个元素迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511322/