2024-06-01 11:09:13 发布
网友
我需要用Javascript从列表中生成一些对象。在Python中,我会写下:
{key_maker(x): val_maker(x) for x in a_list}
另一个问题是是否存在像jQuery.map()这样聚合对象的东西?我的猜测是(不起作用):
jQuery.map()
var result = {} $.map(a_list, function(x) { $.extend(result, {key_maker(x): val_maker(x)}) })
假设a_list是一个数组,那么最接近的可能是使用.reduce()。
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()执行相同的操作。
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) }), {})
假设
a_list
是一个数组,那么最接近的可能是使用.reduce()
。数组理解可能会出现在JavaScript的未来版本中。
您可以用compatibility patch from MDN修补不符合ES5的实现。
如果
a_list
不是数组,而是纯对象,则可以使用Object.keys()
执行相同的操作。下面是一个不使用reduce的版本:
Object.fromEntries与Lodash中的_.fromPairs基本相同。这对我来说最像是Python dict的理解。
旧问题,但在新版本的Javascript中,答案略有变化。使用ES2015(ES6),您可以实现如下一行式对象理解:
相关问题 更多 >
编程相关推荐