所以我有一个如下对象:
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
从unmatchedLines
对象中删除data
,以便代替创建一个全新的对象并将其推送到输出中做:
delete data[i].unmatchedLines;
outPutObject.responses.push(data[i]);
但后来我读到delete
非常缓慢,偶然发现一条帖子说明将undefined
放到delete
而不是使用delete
会更快。
我的问题:
最后使用什么更好? undefined
,设置为jQuery(document).ready(function($){
console.log('ready');
$('#user_telephone').on('keypress',function(e){
console.log(e.which);
if (e.which!=43 && e.which!=49 && e.which!=50 && e.which!=51 && e.which!=52 && e.which!=53 && e.which!=54 && e.which!=55 && e.which!=56 && e.which!=57 && e.which!=48 && e.which!=8){
e.preventDefault();
}
});
或创建一个新对象,就像我现在正在做的那样?
答案 0 :(得分:7)
&#34;更好。&#34;
确实,当你delete
来自一个对象的属性时,在许多现代引擎上将对象置于一个较慢的字典模式&#34;如果你没有从中删除属性,那意味着对该对象的后续属性查找(在你的情况下为data[i]
)将比delete
之前更慢。因此,将属性设置为undefined
(这不是完全相同的事情)可能适用于那些非常罕见情况,其中对象的属性访问速度很重要。
答案 1 :(得分:0)
可能是这样,但它确实取决于列表的长度,但是:
这两种技术之间的任何性能差异都将是 在任何典型案例中都是无法估量的。
无论如何:如果你真的需要额外的性能,你应该考虑处理克隆和不可变数据集(more info about immutable performances)