首页 > 解决方案 > Lodash - 在 _.forEach 中使用 _.update

问题描述

我正在尝试在_.update方法内部使用该方法_.forEach,但我不明白为什么新添加的属性的值为undefined.

仅供参考,我必须单独定义函数,然后将其传递给_.update方法,我不能直接将其写入_.update方法(它必须是动态的)。

我尝试过以多种不同的方式来构建它,但它们都不起作用。

let object = [{ 'a': 1, 'b': 1 }, { 'a':1, 'b': 1 }]
function myFunc (row) { return row.a + row.b }
_.forEach(object, row => _.update(row, 'c', myFunc(row)))

console.log(object)

我希望得到:

[{ 'a': 1, 'b': 1, 'c': 2 }, { 'a':1, 'b': 1, 'c': 2  }]

标签: scopelodash

解决方案


_.update()方法用于更新现有属性,它接受更新函数,而不是值(如 myFunc 生成的值)。

在您的情况下,您应该使用_.set(), 接受一个值:

const object = [{ 'a': 1, 'b': 1 }, { 'a':1, 'b': 1 }]

function myFunc(row) {
  return row.a + row.b
}

_.forEach(object, row => _.set(row, 'c', myFunc(row)))

console.log(object)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

如果你不必使用 lodash,你可以使用Array.forEach()

const object = [{ 'a': 1, 'b': 1 }, { 'a':1, 'b': 1 }]

object.forEach(row => row.c = myFunc(row))

function myFunc(row) {
  return row.a + row.b
}

console.log(object)


推荐阅读