Javascript 压缩数组自动索引或命名

标签 javascript functional-programming underscore.js lodash

如何压缩两个或多个数组,然后按名称而不是按索引迭代每个元素?在Python中,你可以这样做:

for A, B in zip(As, Bs):

但是,在 Javascript 中我使用的是这样的东西:

var As = [1,2,3];
var Bs = [4,5,6];
_(As)
.zip(Bs)
.map(function(x) { 
    return {A:x[0], B:x[1]}; // I want x[0] and x[1] mapped to names.
})
.map(function(x) {
    // Now I can use x.A and x.B.
    ...

有更好的方法在 Javascript 中做到这一点吗?

最佳答案

您可以使用_.object将数组转换为对象:

_(zipped).map(function(values) {
    return _.object(['a', 'b'], values);
});

http://jsfiddle.net/1quhesmq/

或者如果您愿意,可以使用部分应用的函数

_(zipped).map(_.partial(_.object, ['a', 'b']));

http://jsfiddle.net/1quhesmq/6/

<小时/>

您还可以扩展 Underscore 来概括此行为,例如:

_.mixin({
  namedzip: function() {
    var zipped = _.zip.apply(null, _.initial(arguments, 1)),
        list = _.last(arguments);

    return _(zipped).map(function(values) {
        return _.object(list, values);
    });      
  }
});

你会打电话

_(As).namedzip(Bs, ['a', 'b']);

http://jsfiddle.net/1quhesmq/5/

关于Javascript 压缩数组自动索引或命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329717/

相关文章:

javascript - Highcharts 中的径向饼图数据标签

javascript - JavaScript 中的数组长度无效

python - 如何将函数应用于多个变量

javascript - 使用下划线展开功能

javascript - 去抖动不在 $scope.$watch 内触发

javascript - 使用 underscore.js 时如何修复浏览器 CSP 错误

javascript - 如果一个元素已经可见,如何阻止它切换

scala - 在 Scala 中,通过名称参数调用的函数与将另一个函数作为参数的函数不同吗?

groovy - 需要帮助理解使用常规闭包的柯里化(Currying)吗?

javascript - 在事件元素周围添加额外空间