所以我有一个对象如下:
var data = [
{
unmatchedLines: [], //possible big array ~700+ lines per entry
statusCode: 200,
title: "title",
message: "some message",
details: [],
objectDetails: []
},
{
//same object here
}
];
此数组由服务调用填充,然后循环合并输出,然后再将此结果发送回前端。
function convertResultToOneCsvOutput(data) {
var outPutObject = {
unmatchedLines: [],
responses: []
};
for(var i = 0; i < data.length; i++) {
if(data[i].fileData) {
outPutObject.unmatchedLines = outPutObject.unmatchedLines.concat(data[i].fileData);
}
outPutObject.responses.push({
statusCode: data[i].statusCode,
title: data[i].title,
message: data[i].message,
details: data[i].details,
objectDetails: data[i].objectDetails,
})
}
return outPutObject;
};
现在我首先使用 delete
从 data
对象中删除 unmatchedLines
这样,而不是创建一个全新的对象并将其推送到我可以做的输出:
delete data[i].unmatchedLines;
outPutObject.responses.push(data[i]);
但后来我读到 delete
非常慢,偶然发现一个帖子说将它设置为 undefined
而不是使用 delete
会更快。
我的问题:
到底用什么比较好? delete
,设置为 undefined
或像我现在正在做的那样在自身中创建一个新对象?
最佳答案
两者都不是“更好”。
的确,当您从对象中删除
属性时,在许多现代引擎中,对象会进入比您不删除该属性时更慢的“字典模式”从它开始,意味着对该对象的后续属性查找(在您的情况下为 data[i]
)将比 delete
之前慢。因此,将属性设置为 undefined
(这不是一回事)可能适用于那些非常罕见的情况,其中对象的属性访问速度很重要。
关于javascript - 删除属性与创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38584685/