首页 > 解决方案 > 在对象数组中交换属性值的有效方法

问题描述

假设我们有以下对象数组(真实有 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?我只想乘以或调用,然后也更改为和。targetvalueNvalueN-1Math.abs()source"Morocco"target"France"

更新

尽管所有答案都很好,但我已经接受了@Nina Scholz 的干净答案。然而,来自@Emil S. Jørgensen 的那个是性能最高的,一旦跟踪执行时间。我不知道为什么,但如果你不将它转换回一个string,它似乎是最高效的valueN

标签: javascriptarraysobjectflip

解决方案


迭代检查交换更新

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; }


推荐阅读