Javascript 一次使用两个或多个元素迭代数组

Javascript 一次使用两个或多个元素迭代数组,javascript,lodash,Javascript,Lodash,简言之,我想知道是否有一种方法可以更直接地做到这一点。我觉得chunk的问题是我必须创建一个新数组,然后我必须映射它,这样我才能得到第一个值。有没有办法一次循环两个项目 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]) 我想要别的选择 z

简言之,我想知道是否有一种方法可以更直接地做到这一点。我觉得chunk的问题是我必须创建一个新数组,然后我必须映射它,这样我才能得到第一个值。有没有办法一次循环两个项目

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))
或(可能性较小但可接受)


您可以完全不使用
\uuu
库,在本例中使用ES6语法,该语法允许在一次点击中将2D数组分解为单个变量:

var [zeroes, ones] = a.reduce(
    (p, c, i, a) => i % 2 ? (p[c].push(a[i - 1]), p) : p, [[], []]);

这会在数组上迭代一次,对于奇数元素,它会查看其中包含的零或一,并将前面的值放入种子数组的
[0]
[1]
元素中。

您可以完全不使用
库,在这种情况下,使用ES6语法,可以在一次命中中将2D数组分解为单个变量:

var [zeroes, ones] = a.reduce(
    (p, c, i, a) => i % 2 ? (p[c].push(a[i - 1]), p) : p, [[], []]);

它在数组上迭代一次,对于奇数元素,它会查看其中包含的0或1,并将前面的值放入种子数组的
[0]
[1]
元素中。

有时您只需直接编写算法。。。p、 这个问题写得很糟糕,因为你的代表-问题陈述是用代码编写的,使用的库不是每个人都熟悉的,而对要求的一个简单的英语解释会更清楚。ES6一行-需要打高尔夫球-
var[zero,one]=a.reduce((p,c,i,a)=>{if(i%2){p[a[i]][i-1])返回p},[[],[],[])
似乎更像是一个问题。或者:
[zero,one]=a.reduce((r,v,i,a)=>i%2?(r[v]。push(a[i-1]),r:r,[[],[])
@trincot是的,我刚刚想出的正是-
var[zero,one]=a.reduce((p,c,i,a)=>i%2?(p[c]。push(a[i-1]),p],[],[])
有时你只需要直接编写算法……顺便问一下,鉴于你的代表,这个问题写得很糟糕-问题陈述是用一个并非所有人都熟悉的库编写的,而对要求的一个简单的英语解释会更清楚。ES6一行-需要打高尔夫球-
var[zeroes,one]=a.reduce((p,c,i,a)=>{if(i%2){p[a[i]].push(a[i-1])返回p},[[],[],[],[])
似乎更像是一个问题。或者:
[zeroes,one]=a.reduce((r,v,i,a)=>i%2?(r[v].push(a[i-1]),r],[],[],[],[])
@trincot是的,我刚刚想出了一个确切的答案-
[c] .push(a[i-1]),p:p,[[],[])
Wow我没想到会在JS中看到逗号运算符。做得很好。而且,如果有人试图一次使用3个项目,这段代码会很混乱。我非常喜欢这个解决方案,因为它不在外部使用临时变量scope@acidzombie24如果
.push
返回的是数组而不是新的长度,则逗号运算符不会返回直到我可以写
v=>(console.log(v),v*2)为止
。我想不出在添加值后需要数组长度的唯一原因。哇,我没想到会在JS中看到逗号运算符。做得好。如果有人试图一次处理3个项目,这段代码也会一团糟。我非常喜欢这个解决方案,因为它不在外部使用临时变量scope@acidzombie24如果
.push
返回了数组,而不是新的长度逗号运算符仍然不必要,直到我可以写入
v=>(console.log(v),v*2)
。我想不出一个原因来说明为什么在添加值后需要数组长度。