3

私はオブジェクトを持っています:

var obj = {'a':true,'b':false,'c':false,'d':true}

trueそして、値がオブジェクト内にあるキーを含む同期配列があります。

var arr = ['a','d']

したがって、obj次のように変更した場合: (aの値が に変更されましたfalse)

obj = {'a':false,'b':false,'c':false,'d':true}

次にarr、次のように同期する必要があります: (a要素はから削除されますarr)

arr = ['d'];

私は2つの解決策を考えました:

  1. オブジェクトが変更されるたびに、オブジェクト内のキーの値に応じて、配列内のそのキーに対してプッシュ/削除操作を実行して、同じ arr を操作します。(私の場合、オブジェクトの更新は angularjs を使用して簡単に検出できます)

  2. オブジェクトが変更されるたびに、古い配列を、値が in に設定されているキーのみを含む新しい配列に置き換えますtrue

どちらのソリューションが優れていますか??

4

5 に答える 5

1

まあ、それはいくつかのことに依存します。

オブジェクトにペアがいくつあるか、またはそのようなオブジェクトがいくつあるか。

ユースケースを簡単に説明できますか?

最初のものは、に依存しているため、メモリ効率が低くなりますGC。しかし、エラーが発生しにくいです。

したがって、配列を置き換える(新しい配列を構築する)よりも、オブジェクト内の項目が少ない(たとえば、50または100である可能性がある)場合は、より良いはずです。

場合によっては、エラーが発生しにくいコードのが、メモリ効率の低いコードよりも優れています。

angularを使用していると述べましたが、コードソリューションを探している場合、これはすぐに役立つかもしれません.

$scope.$watch('obj', function (newVal, oldVal) {
    $scope.selectedItems = $.map(newVal,function(k,v){
      if(k === true)
        return v;
    });
  },true);
于 2013-06-21T07:28:53.070 に答える
0

最初の方がいいです。この場合、値が変更されたものだけを削除する必要があります。

例: 配列に 1000,000 個の要素があります。ただし、変更されるのは 1 つだけです。したがって、1 つの要素に対してのみ実行されます。

2番目のケースでは、すべての要素、つまり時間がかかり、処理がチェックされます。

于 2013-06-21T07:32:00.230 に答える
0

jQuery の map 関数が必要です。

var o = {'a':true,'b':false,'c':false,'d':true};

jQuery.map(o, function(val, idx){
  if(val)
   return idx;
});

オブジェクトが変更された場合、古い配列をこれに置き換えることができます: それでも、これはかなり良い解決策だとは思いません..

于 2013-06-21T07:24:29.960 に答える