複数のプロパティを持つオブジェクトを作成します-
var objOpts = {
option1: 'Option1',
option2: 'Option2',
option2: 'Option3'
};
その後、後でいくつかのプロパティを追加します-
objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'
その後、後者の2つのプロパティ(「Option4」と「Option5」)の作成が完了し、両方をクリア/削除したいと思います。
現在、私はそうします-
delete objOpts.option4
delete objOpts.option5
これを行う別の方法はありますか?さらに5つのプロパティを追加し、ほぼ同じ「削除」コードの5行であるすべてをクリア/削除する必要があると想像してください
オブジェクトにカスタムプロパティを追加しようとしていると確信しています。
私が提案するより簡単な方法は、サブプロパティを作成することです:
objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'
このようにすると、delete objOpts.custom
で完了できます。この手順の後、objOpts.custom = {}
を再作成する必要があることに注意してください。
さらに、パブリックプロパティはプライベートプロパティと簡単に区別できるため、この方法もOOPに近いと感じます。
JavaScriptでオブジェクトを削除することから始めている場合、このトピックに関する優れた記事を参照したいと思います。 http://perfectionkills.com/understanding-delete/
メタプロパティをいじって、プロパティが削除されないように保護することなどができます(ケースにより良いコーディングフローを作成するため)
編集:
プロパティを削除して再作成する代わりに、objOpts.custom = {}
とoption4
とoption5
をメモリから解放する(最終的にはガベージコレクション経由で)と言うことができます。
ライブラリlodashを使用した簡単な修正が1つあります。
_.omit
関数は、オブジェクトと削除したいキーの配列を受け取り、配列で言及されているものを除く、元のオブジェクトのすべてのプロパティを持つ新しいオブジェクトを返します。
これを使用するとキーを削除できます。これを使用すると、新しいオブジェクトが取得され、元のオブジェクトはそのまま残ります。これにより、元のオブジェクトのキーを削除した場合、そのオブジェクトを使用するコードの他のすべての部分がコードのバグを壊したり、導入する傾向があるという突然変異の問題を回避できます。
例
var obj = {x:1, y:2, z:3};
var result = _.omit(obj, ['x','y']);
console.log(result);
//Output
result = {z:3};
同じもののドキュメントへのリンク ここをクリック
ES6には、これに対するエレガントなソリューションがあります:Rest in Object Destructuring:
let { a, b, ...rest } = { a: 10, b: 20, c: 30, d: 40 };
console.log(rest); // { c: 30, d: 40 }
これは元のオブジェクトを変化させないことに注意してください。しかし、一部の人々はまだこれが便利だと感じるかもしれません。
参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
1つの方法は、オブジェクトとプロパティを引数として取る別の関数を作成することです。
以下もコード:
var objOpts = {
option1: 'Option1',
option2: 'Option2',
option3: 'Option3',
option4: 'Option4'
};
/**
* Method for removing object properties
*
*/
var removeObjectProperties = function(obj, props) {
for(var i = 0; i < props.length; i++) {
if(obj.hasOwnProperty(props[i])) {
delete obj[props[i]];
}
}
};
// remove
removeObjectProperties(objOpts, ["option1", "option2"]);
// objOpts - after
console.log(objOpts);
また、MaunoVänäよりも最新の方法を提供します。
function deleteProps (obj, prop) {
for (const p of prop) {
(p in obj) && (delete obj[p]);
}
}
例:
// Create sample object
const myObject = {
a: 'Foo',
b: 'Baa',
c: 'Oof'
};
// Prints: {a: "Foo", b: "Baa", c: "Oof"}
console.log(myObject);
// Delete props
deleteProps(myObject, ['a', 'b']);
// Prints: {c: "Oof"}
console.log(myObject);
var obj = {"key1":1,"key2":2,"key3":3,"key4":4};
if (!('multidelete' in Object.prototype)) {
Object.defineProperty(Object.prototype, 'multidelete', {
value: function () {
for (var i = 0; i < arguments.length; i++) {
delete this[arguments[i]];
}
}
});
}
obj.multidelete("key1","key3");
このように使用して、オブジェクト内の複数のキーを削除できます
Object.keys(object).forEach((prop) => delete object[prop]);