使用LoDash

时间:2016-12-07 00:10:59

标签: javascript 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>

我想知道是否有更明确的方式来表达这种映射。

2 个答案:

答案 0 :(得分:5)

使用简单的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]]

答案 1 :(得分:3)

  

_.nth

     

获取数组索引n处的元素。如果n为负数,则返回结尾的第n个元素。

以相反的顺序得到兄弟姐妹

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