javascript - 使用 lodash 将函数应用于对象的过滤属性

标签 javascript lodash

我想使用 lodash 有选择地改变对象中的属性。

var foo = { 'a': 1, 'b': 2, 'c': 3 };

function addOne(num) {
    return num + 1;
}

var propsToTransform = ['a', 'b'];

_(foo).pick(propsToTransfrom)
  .map(addOne);

// I want foo = { 'a': 2, 'b':3, 'c':3 }

是否有可能使用我上面概述的那种组合来实现这一点,还是我应该坚持类似的东西

_.forEach(propsToTransform, (prop) => {
  if (foo[prop]) {
    foo[prop] = addOne(foo[prop]);
  }
});

最佳答案

您正在寻找_.mapValues_.protoype.value正如andlrc指出的那样。您最终将创建一个具有新值的新对象并将其与原始对象合并:

var foo = { 'a': 1, 'b': 2, 'c': 3 };
var propsToTransfrom = ['a', 'b']

// Create a new object with the new, modified values and merge it onto the original one
var bar = _.merge(foo, _(foo).pick(propsToTransfrom).mapValues(addOne).value());

console.log(bar); // { 'a': 2, 'b': 3, 'c': 3 }

function addOne(num) {
    return num + 1;
}

关于javascript - 使用 lodash 将函数应用于对象的过滤属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447815/

相关文章:

javascript - 使用 lodash 或 JS 按值对对象数组进行排序

typescript - lodash 获取正确的类型

javascript - 谷歌地图 - map 未加载

javascript - 使用 async/ajax 时保持不变的粘性页脚?

javascript - jquery 查找功能不起作用

javascript - 使用自定义函数在 lodash 中创建链

javascript - 将多维 json 数组中的一组属性列入白名单并删除其余属性

javascript - 使用 lowdb 映射多个键

javascript - 单击按钮时 Mithril 显示组件

javascript - 为什么我不能在不损失 JS 精度的情况下将字符串转换为数字?