克隆除一个键以外的js对象
我有一个平坦的JS对象:
{a: 1, b: 2, c: 3, ..., z:26} 我想克隆除了一个元素的对象:
 {a: 1, c: 3, ..., z:26} 
最简单的方法是什么(如果可能的话,宁愿使用es6 / 7)?
如果使用Babel ,则可以使用以下语法将属性b从x复制到variablesb中,然后将其余属性复制到variablesy中 :
 let x = {a: 1, b: 2, c: 3, z:26}; let {b, ...y} = x; 
它将被转换成:
 "use strict"; function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var x = { a: 1, b: 2, c: 3, z: 26 }; var b = xb; var y = _objectWithoutProperties(x, ["b"]); 
 var clone = Object.assign({}, {a: 1, b: 2, c: 3}); delete clone.b; 
或者如果你接受属性是未定义的:
 var clone = Object.assign({}, {a: 1, b: 2, c: 3}, {b: undefined}); 
要添加到Ilya Palkin的答案:你甚至可以dynamic删除键:
 const x = {a: 1, b: 2, c: 3, z:26}; const objectWithoutKey = (object, key) => { const {[key]: deletedKey, ...otherKeys} = object; return otherKeys; } console.log(objectWithoutKey(x, 'b')); // {a: 1, c: 3, z:26} console.log(x); // {a: 1, b: 2, c: 3, z:26}; 
在Babel REPL演示
资源:
 对于那些不能使用ES6的人,可以使用lodash或underscore 。 
 _.omit(x, 'b') 
 或者ramda 。 
 R.omit('b', x) 
你可以为它写一个简单的帮助函数。 Lodash具有相同的名称: omit
 function omit(obj, omitKey) { return Object.keys(obj).reduce((result, key) => { if(key !== omitKey) { result[key] = obj[key]; } return result; }, {}); } omit({a: 1, b: 2, c: 3}, 'c') // {a: 1, b: 2} 
另外请注意,它比Object.assign更快,然后删除: http : //jsperf.com/omit-key
也许这样的事情:
 var copy = Object.assign({}, {a: 1, b: 2, c: 3}) delete copy.c; 
 这足够好吗? 还是不能c实际上被抄袭? 
如果你正在处理一个巨大的variables,你不想复制它,然后删除它,因为这将是低效的。
具有hasOwnProperty检查的简单for循环应该可以工作,并且对未来的需求更加适应:
 for(var key in someObject) { if(someObject.hasOwnProperty(key) && key != 'undesiredkey') { copyOfObject[key] = someObject[key]; } } 
Lodash 省略
 let source = //{a: 1, b: 2, c: 3, ..., z:26} let copySansProperty = _.omit(source, 'b'); // {a: 1, c: 3, ..., z:26}