如何将列表元素组合成对

时间:2015-06-02 22:03:32

标签: javascript underscore.js

javascript中是否有方便的功能,有或没有underscore.js,它会采用[a, b, c, d]形式的列表并将其转换为[[a, b], [b, c], [c, d]]形式的列表?

3 个答案:

答案 0 :(得分:2)

使用Array.prototype.map

可轻松解决此问题

var makePairs = function(arr) {
    // we want to pair up every element with the next one
    return arr.map(function(current, i, arr) {
        // so return an array of the current element and the next
        return [current, arr[i + 1]]
    }).slice(0, -1)
    // for every element except the last, since `arr[i + 1]` is `undefined`
}

var arr = [1, 2, 3, 4]
// you should never use `document.write`, except for in stack snippets
document.write(makePairs(arr).join("<br>"));

答案 1 :(得分:1)

简单的函数式编程方法是使用一些下划线辅助函数:

function consecutives(arr) {
    return _.zip(_.initial(arr), _.rest(arr));
}

答案 2 :(得分:0)

简而言之,没有。

但是,编写自己的函数真的很容易。这里有一个比royhowie提出的基于地图的解决方案更快(而且,我相信,更容易阅读/理解):

function pairNeighbors(arr) {
  var newArray = [];
  for (var i = 1; i < arr.length; i++) {
    newArray.push([arr[i - 1], arr[i]]);
  }
  return newArray;
}

document.write(JSON.stringify(pairNeighbors([1, 2, 3, 4])));