[英]$.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.