I need to generate a couple of objects from lists in Javascript. In Python, I'd write this:

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

Another way to ask is does there exist something like jQuery.map() which aggregates objects? Here's my guess (doesn't work):

var result = {}
$.map(a_list, function(x) {
    $.extend(result, {key_maker(x): val_maker(x)})
})

推荐答案

Assuming a_list is an Array, the closest would probably be to use .reduce().

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

Array comprehensions are likely coming in a future version of JavaScript.


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


If a_list is not an Array, but a plain object, you can use Object.keys() to perform the same operation.

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

Jquery相关问答推荐

JQuery DateTimePicker-在 Select 中抓取星期几

多个 AJAX 调用;获取所有失败的呼叫

如果您的 Select 器对象无效,为什么 jQuery 不会炸弹?

jQuery:使用变量作为 Select 器

jQuery javascript 正则表达式 将
替换为 \n

jQuery ajax() 使用成功、错误和完成与 .done()、.fail() 和 always()

JQuery 仅在 Rails 4 应用程序中的页面刷新时加载

动态设置 iframe src

谷歌图表重绘/zoom 窗口调整大小

Bootstrap 3.0 弹出框和工具提示

使用带有 HTML 表格的 jQuery UI 可排序

如何检测 window.print() 完成

一组元素中具有最大高度的元素

Twitter Bootstrap css 类的 jQuery show() 隐藏

javascript过滤对象数组

超时 jQuery 效果

使用 jQuery 的 removeAttr 删除多个属性

如何使锚链接不可点击或禁用?

由于滚动,响应表内的 bootstrap 按钮下拉菜单不可见

如何以编程方式触发 ngClick