![](/img/trans.png)
[英]Delete a property from an object without creating a new one (No delete operateur)
[英]delete property vs creating new object
所以我有一個如下對象:
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
對象中delete
unmatchedLines
,以便代替創建一個全新的對象並將其推送到輸出我可以做到:
delete data[i].unmatchedLines;
outPutObject.responses.push(data[i]);
但后來我讀到delete
速度很慢,偶然發現一篇帖子說明將這個undefined
為undefined
而不是使用delete
會更快。
我的問題:
到底有什么好用的? delete
,設置為undefined
或創建一個新對象本身就像我現在正在做的那樣?
兩者都不“更好”。
確實,當您從對象中delete
屬性時,在許多現代引擎上將對象置於比從未從中刪除屬性時更慢的“字典模式”,這意味着后續屬性查找對象(在您的情況下為data[i]
)將比delete
之前更慢。 因此,將屬性設置為undefined
(這不是完全相同的事情)可能適用於對象上屬性訪問速度很重要的極少數情況。
這可能是真的,但它確實取決於列表的長度,但是:
在任何典型情況下,這兩種技術之間的任何性能差異都將是無法估量的。
( 有關刪除的更多信息 )
無論如何:如果你真的需要額外的性能,你應該考慮處理克隆和不可變的數據集( 更多關於不可變性能的信息 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.