2015-09-12 5 views
6

В JavaScript, я могу удалить ключ объекта сJavaScript - встроенная функция для удаления нескольких ключей в объекте?

delete myObject[myKey];

Иногда, мне нужно удалить довольно много ключей, но не все значения в родительском ключе, который инкапсулирует ключи я хочу удалить ,

Есть ли эффективный способ удаления нескольких ключей с использованием одной строки? То, что выглядит как:

multiDelete myObject[keyOne, keyTwo, keyThree];

+0

Efficient с какой точки зрения? Использование 'delete' уже неэффективно на первом месте. – zerkms

+0

* но не все значения в родительском ключе, которые инкапсулируют ключи, которые я хочу удалить * Не могли бы вы уточнить? Что вы подразумеваете под «родительским ключом» или «инкапсулировать ключи»? –

ответ

2

Там нет встроенной функции, но один из способов вы можете сделать это, чтобы добавить метод 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 }; 

DEMO

+0

Если вы собираетесь перебирать такие аргументы, сначала не нужно срезать его. Кроме того, 'enumerable' и' configurable' по умолчанию 'false' и не нужно явно указывать. –

10

Вот один вкладыш подобно тому, что вы запрашиваете.

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} 
2

Там нет встроенных в JS функции, чтобы удалить несколько ключей, то вы можете использовать любую библиотеку для этого, таких как 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'} 
Смежные вопросы