javascript - 在对象数组中交换属性值的有效方法
问题描述
假设我们有以下对象数组(真实有 71000 个元素,但 4 个对象足以让您了解):
[
{
source: "France"
target: "Morocco"
timeN: "2008"
valueN: "252.35"
},
{
source: "France"
target: "Morocco"
timeN: "2009"
valueN: "424.12"
},
{
source: "France"
target: "Morocco"
timeN: "2010"
valueN: "152.24"
},
{
source: "France"
target: "Morocco"
timeN: "2011"
valueN: "-342.19"
}
]
如果是负数,我如何有效地交换最后一个对象的值source
?我只想乘以或调用,然后也更改为和。target
valueN
valueN
-1
Math.abs()
source
"Morocco"
target
"France"
更新
尽管所有答案都很好,但我已经接受了@Nina Scholz 的干净答案。然而,来自@Emil S. Jørgensen 的那个是性能最高的,一旦跟踪执行时间。我不知道为什么,但如果你不将它转换回一个string
,它似乎是最高效的valueN
。
解决方案
var array = [{ source: "France", target: "Morocco", timeN: "2008", valueN: "252.35" }, { source: "France", target: "Morocco", timeN: "2009", valueN: "424.12" }, { source: "France", target: "Morocco", timeN: "2010", valueN: "152.24" }, { source: "France", target: "Morocco", timeN: "2011", valueN: "-342.19" }];
array.forEach(o => {
if (o.valueN < 0) {
[o.source, o.target] = [o.target, o.source];
o.valueN *= -1;
}
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- security - 如何防止 CDN 后面的源服务器 IP 地址暴露,如 Cloudflare?
- javascript - 使用来自子域的请求发送 cookie
- wpf - WPF更改鼠标悬停并按下的按钮样式
- java - 检查数组列表是否包含两个字符串
- python - 多重激活环境?
- java - 如何设置 RestTemplate 以重试某些响应状态代码的调用?
- asp.net - 在 web.config 中访问域以 root 的规则
- python - 如何将线程概念用于我的 update() 函数而不是 root。after() ,这样它就不会干扰 tkinter 窗口
- flutter - Firestore 在颤动中为不同的文档发送相同的图像
- c# - 图像opencvsharp中的阈值深度距离c#intel realsense