2016-12-07 126 views
2
元組陣列

我有一個數組,例如:映射數組使用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可以採用他正在使用的**實際功能**,它可以工作。它甚至會更好,因爲對於他的場景,可能有比組合陣列更好的解決方案。 –

回答

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]] 
3

_.nth

獲取在陣列的索引n的元素。如果n爲負數,則返回從結尾開始的第n個元素。

剛剛獲得同級以相反的順序

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