Arrays 基于数组元素的连接

Arrays 基于数组元素的连接,arrays,node.js,underscore.js,Arrays,Node.js,Underscore.js,我用 问题是,我有很多数组,它们的元素是数组, 比如说 array1 = [[1,2],[1,3],[4,5]] array2 = [[2],[4,6]] 问题是我想通过元素连接数组,如下所示 array3 = array1 join array2 array3 = [[1,2],[1,3,4,6],[4,5]] 是否有任何优雅的方式可以使用下划线进行基于元素的连接。您正在寻找的join=zipWith-concat:-) 用下划线,你可以写 array3 = _.map(_.zip(arr

我用

问题是,我有很多数组,它们的元素是数组, 比如说

array1 = [[1,2],[1,3],[4,5]]
array2 = [[2],[4,6]]
问题是我想通过元素连接数组,如下所示

array3 = array1 join array2
array3 = [[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] || []);
});
逐步解释:

console.log(_.zip(array1, array2));
/*[ [ [ 1, 2 ], [ 2 ] ],
    [ [ 1, 3 ], [ 4, 6 ] ],
    [ [ 4, 5 ], undefined ] ]*/
我们在列表中的每个项目上应用
\uq.uniq(q.flant(q.compact(item),true))

  • 首先,将对项目应用compact。这很重要,因为我们必须去掉最后一个元素中未定义的

  • 然后我们将数组展平,这样
    [1,2],[2]
    将变成
    [1,2,2]

  • 然后我们只取唯一的元素。因此,输出变为
    [1,2]

  • 编辑:实际上,如果你喜欢一行,你可以这样做

    _.map(_.zip(array1, array2), _.compose(_.uniq, _.flatten, _.compact));
    // [ [ 1, 2 ], [ 1, 3, 4, 6 ], [ 4, 5 ] ]
    

    您可以使用
    partial
    :使用
    .partial(u.flatte,uu,true)
    作为迭代器将其缩短一点。@AaronDufour:我知道,但我认为这可能太让人困惑了|编辑:而且它不起作用:-(
    _.map(_.zip(array1, array2), _.compose(_.uniq, _.flatten, _.compact));
    // [ [ 1, 2 ], [ 1, 3, 4, 6 ], [ 4, 5 ] ]