簡體   English   中英

$ .extend排除一些JSON對象

[英]$.extend with excluding some JSON objects

請參考下面的代碼。

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

這會將選項中的所有JSON對象合並到this.model.series。 我想從與this.model.series合並選項中排除單個JSON對象

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

我想將except points選項except points所有json對象從選項合並或復制到this.model.series。

因為10,000點需要花費很長時間才能將所有json對象與this.model.series合並,所以這會降低性能。

我如何才能通過有效地使用$ .extend來提高性能(可能積分合並需要太多時間)。 在這種情況下我該怎么辦?

謝謝,

濕婆

首先,我認為您錯誤地使用了$ .extend。 您的true參數應該是進行遞歸的第一個參數。 其次,我不認為可以使用jQuery.extend()進行擴展-排除。 嘗試這個:

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

那是懶惰的方式。 這樣,您可以包括檢查其他鍵(而不僅僅是“點”)。 如果那還不夠快,那么您應該在該函數中創建遞歸並手動擴展對象,而不必在之后使用jQuery擴展。

或在擴展后重新包括新點:

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作為參數,以擴展&包括排除選項數組; 但不是這個版本:)

暫無
暫無

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

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