javascript对象的性能相关问题

时间:2018-09-07 10:13:01

标签: javascript json object

我想知道下面两个编码范例中是否存在一些性能问题。哪一个最好,为什么?

var data = [{
        "name": "ABC",
        "code": 1,
        "age": 97
    },{
        "name": "XYZ",
        "code": 12,
        "age": 12
    },{
        "name": "LMN",
        "code": 121,
        "age": 172
    }
];

var response = [];
  

Method1

data.forEach(function(entry){
        var obj = {
            "NAME": entry["name"],
            "AGE": entry["age"]
        };
        response.push(obj);
});
  

Method2

data.forEach(function(entry){
        var obj = {};
        obj["NAME"] = entry["name"];
        obj["AGE"] = entry["age"];
        response.push(obj);
});

对于输出对象,我想说一下,在100个键中只有10个键 该对象中有许多键。示例中仅显示受限。选择哪种编码标准,为什么?拜托,有人可以解释吗?

2 个答案:

答案 0 :(得分:1)

无需创建对象,然后进行Array.prototype.push()即可进行循环遍历...

您可以直接使用Array.prototype.map()代替Array.prototype.forEach(),并通过dot notation更好地访问对象属性值:

const data = [{
    "name": "ABC",
    "code": 1,
    "age": 97
  },{
    "name": "XYZ",
    "code": 12,
    "age": 12
  },{
    "name": "LMN",
    "code": 121,
    "age": 172
  }
];

const response = data.map(obj => ({
  NAME: obj.name,
  AGE: obj.age
}));

console.log(response)

答案 1 :(得分:0)

两种方法都很好,并且一种方法不应比另一种“更快”,至少不足以证明使用另一种方法是合理的。使用您喜欢的一个。

但是,如果您仍在寻求关闭。第一个应该更快,因为它一次定义了整个对象。引擎不必做任何“查找”。一口气完成。

另外,请考虑使用点符号,它应该更快,因为引擎不必创建字符串。所以,改变

entry["name"]

entry.name

此外,如果这是您的实际代码,目的是将结果修改为仅包含名称 age ,而没有 code 。你可以做

data.forEach(user => delete user.code)