簡體   English   中英

刪除屬性與創建新對象

[英]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;
};

現在我首先使用deletedata對象中delete unmatchedLines ,以便代替創建一個全新的對象並將其推送到輸出我可以做到:

 delete data[i].unmatchedLines;
 outPutObject.responses.push(data[i]);

但后來我讀到delete速度很慢,偶然發現一篇帖子說明將這個undefinedundefined而不是使用delete會更快。

我的問題:

到底有什么好用的? delete ,設置為undefined或創建一個新對象本身就像我現在正在做的那樣?

兩者都不“更好”。

確實,當您從對象中delete屬性時,在許多現代引擎上將對象置於比從未從中刪除屬性時更慢的“字典模式”,這意味着后續屬性查找對象(在您的情況下為data[i] )將比delete之前更慢。 因此,將屬性設置為undefined (這不是完全相同的事情)可能適用於對象上屬性訪問速度很重要的極少數情況。

這可能是真的,但它確實取決於列表的長度,但是:

在任何典型情況下,這兩種技術之間的任何性能差異都將是無法估量的。

有關刪除的更多信息

無論如何:如果你真的需要額外的性能,你應該考慮處理克隆和不可變的數據集( 更多關於不可變性能的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM