、私は時々JavaScript - オブジェクト内の複数のキーを削除する関数が組み込まれていますか? JavaScriptでは
delete myObject[myKey];
でオブジェクトのキーを削除することができ、私は私が削除したいキーをカプセル化する親キーの値のすべてのかなりの数のキーを削除する必要はなく、 。
複数のキーを1行で効率的に削除する方法はありますか?以下のように見える何か:
multiDelete myObject[keyOne, keyTwo, keyThree];
、私は時々JavaScript - オブジェクト内の複数のキーを削除する関数が組み込まれていますか? JavaScriptでは
delete myObject[myKey];
でオブジェクトのキーを削除することができ、私は私が削除したいキーをカプセル化する親キーの値のすべてのかなりの数のキーを削除する必要はなく、 。
複数のキーを1行で効率的に削除する方法はありますか?以下のように見える何か:
multiDelete myObject[keyOne, keyTwo, keyThree];
そこには組み込み関数はありませんが、あなたがそれを行うことができます一つの方法は、オブジェクトのプロトタイプに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 };
そのような引数をループする場合は、最初にスライスする必要はありません。また、 'enumerable'と' configurable'はデフォルトで 'false'になり、明示的に指定する必要はありません。 –
ここでワンライナーは、あなたが要求しているものと似ています。 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}
は、あなたがこれを行うに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'}
? 'delete'を使用することは、すでに最初の場所では非効率的です。 – zerkms
*削除したいキーをカプセル化する親キーの値のすべてではありません。*明示できますか? 「親キー」または「キーをカプセル化する」とはどういう意味ですか? –