我需要从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;
}, {});