使用下划线更改数组中的一个 属性 个对象
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".
我希望利用下划线来避免在我的代码库中编写 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".