javascript - 删除属性与创建新对象

标签 javascript performance

所以我有一个对象如下:

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 对象中删除 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/

相关文章:

SQL效率-使用dateAdd函数查询两次;或 SubQuery 和 DateAdd 函数一次;日期之间

java - ExecutorService 适用于海量的短命任务

c# - 如何提高 C# 中 ConcurrentDictionary.Count 的性能

javascript - Google Places JavaScript API v3,如何将我的 API key 添加到请求中?

javascript - 无需在 AngularJS 中重新初始化 Controller 即可更改包含的页面和 URL

javascript - 如何更改 keith-wood jQuery 倒计时中的时钟文本

C++:什么更快 - 在 hashmap 或 switch 语句中查找?

游戏中的 Javascript 触摸事件句柄

javascript - 使用tinymce禁用/启用按钮

performance - 可理解性与性能