我想知道下面两个编码范例中是否存在一些性能问题。哪一个最好,为什么?
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个键 该对象中有许多键。示例中仅显示受限。选择哪种编码标准,为什么?拜托,有人可以解释吗?
答案 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)