我需要从Javascript列表中生成几个对象。在Python中,我会这样写:

{key_maker(x): val_maker(x) for x in a_list}

询问的另一种方法是是否存在像jQuery.map()这样的对象聚合对象?这是我的猜测(无效):
var result = {}
$.map(a_list, function(x) {
    $.extend(result, {key_maker(x): val_maker(x)})
})

最佳答案

假设a_list是一个数组,则最接近的可能是使用.reduce()

var result = a_list.reduce(function(obj, x) {
    obj[key_maker(x)] = val_maker(x);
    return obj;
}, {});

数组理解可能会在JavaScript的 future 版本中出现。

您可以使用compatibility patch from MDN修补不符合ES5的实现。

如果a_list不是数组,而是普通对象,则可以使用Object.keys()执行相同的操作。

var result = Object.keys(a_list).reduce(function(obj, x) {
    obj[key_maker(a_list[x])] = val_maker(a_list[x]);
    return obj;
}, {});

08-05 19:33
查看更多