javascript - $.extend 排除一些 JSON 对象

标签 javascript jquery extend

请引用下面的代码。

var series=$.extend({},true,options,this.model.series);

这会将选项中的所有 JSON 对象合并到 this.model.series。我想从与 this.model.series 的合并选项中排除单个 JSON 对象

options:{style:{},points:[{},{}], marker:{},...} 

我想将所有 json 对象从选项合并或复制到 this.model.series except points

因为对于 10,000 个点,将所有 json 对象与 this.model.series 合并需要很长时间,这会降低性能。

我如何通过有效地使用 $.extend 来提高性能(可能点合并需要太多时间)。我该如何处理这种情况?

谢谢,

湿婆

最佳答案

首先,我认为您错误地使用了 $.extend。您的真实参数应该是进行递归的第一个参数。其次,我认为没有任何方法可以使用 jQuery.extend() 进行扩展排除。试试这个:

var series = {};
$.each(options,function(key,value){
  if( key != 'points' )
    series[key] = value;
});
$.extend(true,series,this.model.series);

这是懒惰的方式。这样你就可以检查其他键(而不仅仅是“点”)。如果这还不够快,那么您应该在该函数内创建递归并手动扩展对象,而不必使用 jQuery extend after。

或者这个,在扩展后重新包含新点:

var points = options.points;
options.points = null;
series = $.extend(true,options,this.model.series);
series.points = points;

在保存点评论后编辑:

var tempOptions = options, tempSeries = this.model.series;
tempOptions.points = null;
tempSeries.points = null;
var series = $.extend(true,tempOptions,tempSeries);
series.points = options.points; // Use this one OR
series.points = this.model.series.points; // Use this one, depending on what you need

进一步努力:

var series = {}, tempSeries = {};
$.each(options,function(key,value){
  if( key != 'points' )
    series[key] = value;
});
$.each(this.model.series,function(key,value){
  if( key != 'points' )
    tempSeries[key] = value;
});
$.extend(true,series,tempSeries);
series.points = this.model.series.points;

自定义实现:

function extendExclude( exclude, obj1, obj2 ) {
    for( i in obj2 ) {
        if( ( typeof obj1[i] !== 'object' ) || ( typeof obj2[i] !== 'object' ) ) {
            obj1[i] = obj2[i];
        } else if( i != exclude ) {
            extendExclude( null, obj1[i], obj2[i] )
        }
    }
    return obj1;
}

var series = extendExclude( 'points', options, this.model.series );

这可以扩展为包括无限 objs 作为参数以扩展 & 以包括排除选项数组;但不是这个版本:)

关于javascript - $.extend 排除一些 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144975/

相关文章:

javascript - Jquery Mobile - $.mobile.changepage 不加载外部 .JS 文件

javascript - 需要div被下推

javascript - 使用 PageContainer 动态加载面板

javascript - 将 Highcharts 线系列延伸到图表末尾

javascript - 如何使带有 setTimeout() 的函数按顺序工作?

javascript - d3 select 抛出无效查询选择器错误

javascript - 在 JavaScript 中查找位置的鼠标事件目标

javascript - 如何使用 jquery 将类添加到仅匹配条件的一个元素?

PHP : Does extending class need another 'use' to call namespace?

Javascript:扩展函数