2015-09-12 1 views
6

、私は時々JavaScript - オブジェクト内の複数のキーを削除する関数が組み込まれていますか? JavaScriptでは

delete myObject[myKey];

でオブジェクトのキーを削除することができ、私は私が削除したいキーをカプセル化する親キーの値のすべてのかなりの数のキーを削除する必要はなく、 。

複数のキーを1行で効率的に削除する方法はありますか?以下のように見える何か:

multiDelete myObject[keyOne, keyTwo, keyThree];

+0

? 'delete'を使用することは、すでに最初の場所では非効率的です。 – zerkms

+0

*削除したいキーをカプセル化する親キーの値のすべてではありません。*明示できますか? 「親キー」または「キーをカプセル化する」とはどういう意味ですか? –

答えて

2

そこには組み込み関数はありませんが、あなたがそれを行うことができます一つの方法は、オブジェクトのプロトタイプにmultideleteメソッドを追加することです。それはおそらく少し残酷ですが、あなたはそれが役に立つかもしれません。

if (!('multidelete' in Object.prototype)) { 
    Object.defineProperty(Object.prototype, 'multidelete', { 
     value: function() { 
      for (var i = 0; i < arguments.length; i++) { 
       delete this[arguments[i]]; 
      } 
     } 
    }); 
} 

var obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }; 

obj.multidelete('c', 'e'); // { a: 1, b: 2, d: 4 }; 

DEMO

+0

そのような引数をループする場合は、最初にスライスする必要はありません。また、 'enumerable'と' configurable'はデフォルトで 'false'になり、明示的に指定する必要はありません。 –

10

ここでワンライナーは、あなたが要求しているものと似ています。 jsの機能に建てられた何がまだ複数のキーを削除することはありません

var obj = {a: 1, b: 2, c: 3, d: 4, e: 5 }; 

['c', 'e'].forEach(e => delete obj[e]); 

// obj is now {a:1, b:2, d:4} 
2

は、あなたがこれを行うにunderscore.jsとして、このようにするために任意のライブラリを使用することができます。どのような観点から効率的な

_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid'); 
=> {name: 'moe', age: 50} 

//or you can use function to filter keys 

_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object){ 
    return _.isNumber(value); 
}); 
=> {name: 'moe', userid: 'moe1'} 
関連する問題