映射数组使用LoDash

映射数组使用LoDash

问题描述:

元组阵列

我有一个数组,例如:映射数组使用LoDash

var foo = [1, 2, 3, 4, 5]; 

,我想它映射到:

var bar = [[1,2], [2,3], [3,4], [4,5], [5,1]]; 

我并不需要处理的场景其中的foo长度为0或1。

我的幼稚的做法是:

var foo = [1, 2, 3, 4, 5]; 
 
var bar = _.map(foo, function(value, index) { 
 
    return index < foo.length - 1 ? [value, foo[index + 1]] : [value, foo[0]]; 
 
}); 
 

 
console.log(bar);
<script src="https://cdn.jsdelivr.net/lodash/3.10.1/lodash.js"></script>

我不知道是否有表达这种映射一个更明确的方式。

+0

这个问题更适合[代码评审](HTTP: //codereview.stackexchange.com/)。您已经解决了这个问题,但您正在寻求改进方向。 –

+0

@EmileBergeron请注意Code Review需要真正的代码;包含像'foo'这样的占位符的问题在那里将成为焦点话题。 –

+1

@ 200_success是的你是对的,我个人不是Code Review的用户,所以我的经验是有限的,但OP可以采用他正在使用的**实际功能**,它可以工作。它甚至会更好,因为对于他的场景,可能有比组合阵列更好的解决方案。 –

使用朴素简单lodash。首先从阵列下降的第一个元素,追加,然后与原始阵列拉链它:

var a = [1,2,3,4,5] 
var b = _.zip(a, _.concat(_.drop(a), a[0])) 

其结果是:

console.log(b) 
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 1]] 

_.nth

获取在阵列的索引n的元素。如果n为负数,则返回从结尾开始的第n个元素。

刚刚获得同级以相反的顺序

var bar = _.map(foo, function(val, index) { 
    return [val, _.nth(foo, (index + 1) - foo.length)]; 
});