web-dev-qa-db-ja.com

複数のオブジェクトプロパティを削除しますか?

複数のプロパティを持つオブジェクトを作成します-

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行であるすべてをクリア/削除する必要があると想像してください

28
Stefano

オブジェクトにカスタムプロパティを追加しようとしていると確信しています。

私が提案するより簡単な方法は、サブプロパティを作成することです:

objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'

このようにすると、delete objOpts.customで完了できます。この手順の後、objOpts.custom = {}を再作成する必要があることに注意してください。

さらに、パブリックプロパティはプライベートプロパティと簡単に区別できるため、この方法もOOPに近いと感じます。

JavaScriptでオブジェクトを削除することから始めている場合、このトピックに関する優れた記事を参照したいと思います。 http://perfectionkills.com/understanding-delete/

メタプロパティをいじって、プロパティが削除されないように保護することなどができます(ケースにより良いコーディングフローを作成するため)

編集:

プロパティを削除して再作成する代わりに、objOpts.custom = {}option4option5をメモリから解放する(最終的にはガベージコレクション経由で)と言うことができます。

10
Sunny R Gupta

ライブラリlodashを使用した簡単な修正が1つあります。

_.omit関数は、オブジェクトと削除したいキーの配列を受け取り、配列で言及されているものを除く、元のオブジェクトのすべてのプロパティを持つ新しいオブジェクトを返します。

これを使用するとキーを削除できます。これを使用すると、新しいオブジェクトが取得され、元のオブジェクトはそのまま残ります。これにより、元のオブジェクトのキーを削除した場合、そのオブジェクトを使用するコードの他のすべての部分がコードのバグを壊したり、導入する傾向があるという突然変異の問題を回避できます。

var obj = {x:1, y:2, z:3};
var result = _.omit(obj, ['x','y']);
console.log(result);

//Output
result = {z:3};

同じもののドキュメントへのリンク ここをクリック

26
Akshat Gupta

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

13
Stephen Paul

1つの方法は、オブジェクトとプロパティを引数として取る別の関数を作成することです。

Jsフィドルの例

以下もコード:

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);
8
Mauno Vähä

また、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);
3
Simon
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");

このように使用して、オブジェクト内の複数のキーを削除できます

0
Yogesh Katkar
Object.keys(object).forEach((prop) => delete object[prop]);
0
wilsonpage