Подтвердить что ты не робот

Удалить несколько свойств объекта?

Я создаю объект с несколькими свойствами -

var objOpts = {
  option1: 'Option1',
  option2: 'Option2',
  option2: 'Option3'
};

Затем я добавлю еще несколько свойств -

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

Затем я создаю два последних созданных свойства ( "Option4" и "Option5" ), и я хочу удалить/удалить оба.

В настоящее время я сделал бы это так -

delete objOpts.option4
delete objOpts.option5

Есть ли еще один способ сделать это? Представьте, что я добавил еще 5 свойств и вам нужно было очистить/удалить все, что было бы пятью строками почти идентичного кода "delete"

4b9b3361

Ответ 1

Я уверен, что вы пытаетесь добавить пользовательские свойства к объекту.

Проще всего я бы предложил, создав свойство sub:

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

таким образом вы могли бы delete objOpts.custom и покончить с этим. Обратите внимание, что после этого шага вам придется воссоздать objOpts.custom = {}.

Кроме того, этот способ также будет ближе к ООП, поскольку ваши общедоступные свойства легко будут отличаться от частных.

Если вы начинаете с удаления объектов в JavaScript, я хотел бы указать на превосходно написанную статью по теме: http://perfectionkills.com/understanding-delete/

Вы можете играть с мета-свойствами, которые позволяют защитить свойства от удаления и т.д. (чтобы создать еще лучший поток кодирования для вашего случая)

ИЗМЕНИТЬ:

Я хотел бы добавить, что вместо удаления и повторного создания свойства вы могли бы просто сказать objOpts.custom = {}, который выпустил бы option4 и option5 из памяти (в конечном итоге через Garbage Collection).

Ответ 2

Существует одно простое исправление, использующее библиотеку lodash.

Функция _.omit принимает ваш объект и массив ключей, которые вы хотите удалить, и возвращает новый объект со всеми свойствами исходного объекта, кроме тех, что указаны в массиве.

Это аккуратный способ удаления ключей, используя это, вы получаете новый объект, а исходный объект остается нетронутым. Это позволяет избежать проблемы мутации, где, если мы удалили ключи в исходном объекте, все остальные части кода, использующие этот объект, могут иметь тенденцию ломать или вводить ошибки в код.

Пример

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

//Output
result = {z:3};

Ссылка для документации того же Нажмите здесь

Ответ 3

ES6 имеет элегантное решение для этого: отдых в разрушении объектов:

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

Ответ 4

Один из способов - создать отдельную функцию, которая возвращает ваш объект и свойства в качестве аргумента.

Пример скрипта 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);

Ответ 5

Я бы также предложил более современный метод, чем Mauno Vä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);

Ответ 6

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");

Вы можете использовать это, как это, чтобы удалить несколько ключей в объекте

Ответ 7

Object.keys(object).forEach((prop) => delete object[prop]);

Ответ 8

var extraOpts = {}
extraOpts.options = ['option4','option5','option6','option7','option8']
delete extraOpts.options
console.log(extraOpts.options)