我使用http://underscorejs.org/。基於數組元素的加入
問題是下文中,我有若干陣列的,其元素陣列, 例如
array1 = [[1,2],[1,3],[4,5]]
array2 = [[2],[4,6]]
問題是我想通過元素的加入陣列,如以下
array3 = array1 join array2
array3 = [[1,2],[1,3,4,6],[4,5]]
是否有任何優雅的基於元素的加入下劃線的方式。
我使用http://underscorejs.org/。基於數組元素的加入
問題是下文中,我有若干陣列的,其元素陣列, 例如
array1 = [[1,2],[1,3],[4,5]]
array2 = [[2],[4,6]]
問題是我想通過元素的加入陣列,如以下
array3 = array1 join array2
array3 = [[1,2],[1,3,4,6],[4,5]]
是否有任何優雅的基於元素的加入下劃線的方式。
console.log(_.map(_.zip(array1, array2), function(item) {
return _.uniq(_.flatten(_.compact(item), true));
}));
// [ [ 1, 2 ], [ 1, 3, 4, 6 ], [ 4, 5 ] ]
步驟:
console.log(_.zip(array1, array2));
/*[ [ [ 1, 2 ], [ 2 ] ],
[ [ 1, 3 ], [ 4, 6 ] ],
[ [ 4, 5 ], undefined ] ]*/
我們應用_.uniq(_.flatten(_.compact(item), true))
列表中的每個項目。
第一個_.compact
將應用於項目。這很重要,因爲我們必須在最後一個元素中除掉undefined
。
然後我們_.flatten
陣列,使[ 1, 2 ], [ 2 ]
,將成爲[ 1, 2, 2 ]
然後我們只拿了獨特的元素。所以輸出變成[1, 2]
編輯:其實,如果你喜歡的俏皮話,你可以做
_.map(_.zip(array1, array2), _.compose(_.uniq, _.flatten, _.compact));
// [ [ 1, 2 ], [ 1, 3, 4, 6 ], [ 4, 5 ] ]
您正在尋找join = zipWith concat
:-)
以下劃線,你會一步說明寫
array3 = _.map(_.zip(array1, array2), function(els) {
return _.flatten(_.compact(els), true)
// or just: els[0].concat(els[1] || []);
});
可以使這個有點用'partial'更短:使用'_。作爲迭代器的部分(_。flatten,_,true)'。 –
@AaronDufour:我知道,但我認爲這可能太令人困惑了|編輯:它不會工作:-( – Bergi