2017-12-27 37 views
1

NodeJSで数百万回のループが実行されていますが、他の多くのオブジェクトではいくつかのオブジェクトからいくつかの望ましくないプロパティが取り除かれています。プロパティを削除するか、目的のプロパティだけを使って新しいオブジェクトを作成する方が速いのですか?

私はそれを行うには高速であるかどうか、一般的に知って興味:

undesiredPropsArray.forEach(p => delete(obj[p])) 

または

var newObj = {}; 
Object.keys(obj).forEach(p => { if (!undesiredPropsObj[p]) newObj[p] = obj[p] }); 

単にテストを実行すると、それは多分言うほど簡単ではありません、ので、所望の特性および望ましくない特性の数が変化する。

+0

一般的には標準では何べきについて何も言いませんより速くなる。つまり、実装に依存していることを意味します。また、他のすべてのランタイムバージョンで変更できることを意味します。 – zerkms

+0

Lodashにはこれを行うfnがあり、libはかなりパフォーマンス中心です。私はそれがアイデアを得るためのソースをチェックしたいと思います。 https://lodash.com/docs/4.17.4#pick –

答えて

1

これらのコマンドの実行時間が同じであると仮定すると、実行するコマンドが少ないタスクほど速く実行されます。つまり、保存したいプロパティの数と比較して、望ましくないプロパティが少ない場合は、削除を高速にする必要があります(またその逆もあります)。しかし、莫大な数のオブジェクトが処理されていることを話している場合を除き、時間が節約されます。私は思う:)

1

jsperfのjavascriptコードをベンチマークして比較することができます。 (およそ10mlの液体フッ化水素を圧入66%で - これは変更される場合があります)私がやったと最初のアプローチが期待通りに高速..です

EDIT: をこれは私が使用されるinitコードです:

var undesiredPropsArray = []; 
    var undesiredPropsObj = {}; 
    var obj = {}; 

    for (i=0;i<10000;i++) { 
    obj[i] = null; 
    if ((i%2) === 0) { 
     undesiredPropsArray.push(i); 
     undesiredPropsObj[i] = null; 
    } 
    } 
関連する問題