2015-09-12 75 views
6

在JavaScript中,我可以刪除對象的鍵與JavaScript - 內置刪除對象中的多個鍵的函數?

delete myObject[myKey];

有時候,我需要刪除相當多的按鍵,但不是所有的父項封裝我想刪除鍵的值。

是否有一種有效的方法來刪除多個鍵使用一條線?一些看起來像:

multiDelete myObject[keyOne, keyTwo, keyThree];

+0

從什麼角度看效率?首先,使用'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'}