javascript - 迭代对象属性并修改它们

标签 javascript underscore.js

Underscore.js 在集合上提供 _.each_.map,这很好,但我需要迭代对象的所有属性。我需要修改值并保留键。例如。我有类似: {a:1, b:2, c:3} 的内容,我需要执行一个更改值但保留键的操作。假设我要计算平方,我应该得到 {a:1, b:4, c:9}。问题是:如何使用下划线来做到这一点(对普通 JavaScript 不感兴趣)?我喜欢这样的方法:

var a = {a:1, b:2, c:3}
_.magic(a, function(item){ return item*item; });

此外,如果可以链接它,那就太好了,因为我正在做一个 map ,转储结果以执行每个操作,然后再次使用 map (因为我需要)。

最佳答案

_.mapObject ( added in version 1.8 ) 正是您正在寻找的。 <小时/>

对于以前的版本,可以使用第三个参数来改变原始对象 _.each回调。

_.each({a:1, b:2, c:3}, function(value, key, obj) { obj[key] = value * value; });

使用_.reduce带有初始备忘录也可以创建一个全新的对象。

_.reduce({a:1, b:2, c:3}, function(memo, value, key) {
    memo[key] = value * value;
    return memo;
}, {});

我更喜欢 _.reduce方法。一个简单的 mixin 将使其表现得与 _.map 完全相同。 .

_.mixin({
    magic: function(obj, iterator, context) {
        return _.reduce(obj, function(memo, value, key) {
            memo[key] = iterator.call(context, value, key, obj);
            return memo;
        }, {});
    }
});

关于javascript - 迭代对象属性并修改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26013802/

相关文章:

javascript - 如何使用 setAttribute 更新对象内的一个值?

javascript - 主干 View 事件在重新渲染后不起作用

javascript - 如何使用下划线获取基于对象属性的唯一数组

jquery - Backbone Marionette CompositeView "Event Zombie"

javascript - 以下 Underscore.js 代码如何工作?

Javascript 对象使用 lodash 或下划线进行转换

javascript - 使用 IMG SRC 作为链接 REF 将 LINK 动态添加到 IMG 标签

JavaScript 正则表达式

javascript - 从 Action 设置模型并在 ember js 中重新加载模板

javascript - 从 WebStorm 运行 Jasmine 测试