1

以下のコードを参照してください。

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

これにより、オプションのすべての JSON オブジェクトが this.model.series にマージされます。this.model.series とのマージ オプションから単一の JSON オブジェクトを除外したい

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

すべての json オブジェクトを options から this.model.series にマージまたはコピーしたいexcept points

10,000 ポイントの場合、すべての json オブジェクトを this.model.series とマージするには長い時間がかかるため、パフォーマンスが低下します。

$.extend を効率的に使用してパフォーマンスを改善するにはどうすればよいですか (ポイントのマージに時間がかかりすぎる可能性があります)。この場合どうすればいいですか?

ありがとう、

シヴァ

4

1 に答える 1

2

まず、 $.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 );

これを拡張して、除外オプションの配列を含めるために & を拡張するパラメーターとして無限の obj を含めることができます。しかし、このバージョンではありません:)

于 2013-06-17T10:18:20.487 に答える