在Javascript中,字典理解或对象映射`

2024-06-01 11:09:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用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)})
})

Tags: 对象keyinmap列表forvarfunction
3条回答

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

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

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


您可以用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;
}, {});

下面是一个不使用reduce的版本:

Object.fromEntries( a_list.map( x => [key_maker(x), value_maker(x)]) );

Object.fromEntries与Lodash中的_.fromPairs基本相同。这对我来说最像是Python dict的理解。

旧问题,但在新版本的Javascript中,答案略有变化。使用ES2015(ES6),您可以实现如下一行式对象理解:

a_list.reduce((obj, x) => Object.assign(obj, { [key_maker(x)]: value_maker(x) }), {})

相关问题 更多 >