Удалить несколько свойств объекта?
Я создаю объект с несколькими свойствами -
var objOpts = {
option1: 'Option1',
option2: 'Option2',
option2: 'Option3'
};
Затем я добавлю еще несколько свойств -
objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'
Затем я создаю два последних созданных свойства ( "Option4" и "Option5" ), и я хочу удалить/удалить оба.
В настоящее время я сделал бы это так -
delete objOpts.option4
delete objOpts.option5
Есть ли еще один способ сделать это? Представьте, что я добавил еще 5 свойств и вам нужно было очистить/удалить все, что было бы пятью строками почти идентичного кода "delete"
Ответы
Ответ 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)