使用下划线更改数组中的一个 属性 个对象

Use underscore to change one property of objects in an array

我希望利用下划线来避免在我的代码库中编写 for 循环。我正在使用 map 代替 for 循环,如下所示:

body.tags = _.map(body.tags, function(tag) {
  return {
    id: tag.id,
    userId: tag.userId,
    createDate: tag.createDate,
    tag: tag.tag.toLowerCase(),
  };
});

我的问题是,有没有办法在不指定不会更改的属性(除 tag 之外的所有属性)的情况下执行此操作?指定像 id: tag.id.

这样的字段似乎有点矫枉过正

你甚至不需要下划线:

body.tags.forEach(function(t) { t.tag = t.tag.toLowerCase();});

map(无论是原生的、下划线的还是其他的)用于转换整个值,这不是一个典型的用例来做你试图用它做的事情。此外,使用简单的 for 可能会执行得更好,因为您在这里不需要函数调用,但这取决于运行时优化。

顺便说一下,如果您用此答案中的函数替换映射函数并且 将 return 值设置回 body.tags,您也会得到你想要的结果。

您可以尝试使用以下代码来使用下划线更改集合中的单个 属性。

_.map(body.tags, function(tag) {
    tag.tag = tag.tag.toLowerCase();
    return tag;
});

与原生 forEach 及其性能相比,使用 lodash 的 map 方法(类似于 underscore 库)有一个好处。基于 why lodash is faster than native forEach post,也许使用 lodash 支持下划线和原生 forEach 循环是合理的。但是我同意下面评论的用户 "Choose the approach that is most writable, readable, and maintainable".