我有一个平面 JS 对象:
{a: 1, b: 2, c: 3, ..., z:26}
我想克隆除一个元素之外的对象:
{a: 1, c: 3, ..., z:26}
最简单的方法是什么(如果可能,最好使用 es6/7)?
我有一个平面 JS 对象:
{a: 1, b: 2, c: 3, ..., z:26}
我想克隆除一个元素之外的对象:
{a: 1, c: 3, ..., z:26}
最简单的方法是什么(如果可能,最好使用 es6/7)?
如果您使用Babel,您可以使用以下语法将属性 b 从 x 复制到变量 b 中,然后将其余属性复制到变量 y 中:
let x = {a: 1, b: 2, c: 3, z:26};
let {b, ...y} = x;
并且将transpiled到:
"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 = x.b;
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});
我用这个 ESNext one liner
const obj = { a: 1, b: 2, c: 3, d: 4 }
const clone = (({ b, c, ...o }) => o)(obj) // remove b and c
console.log(clone)
对于那些不会使用 ES6 的人,可以使用lodash
或underscore
。
_.omit(x, 'b')
或者ramda
。
R.omit('b', x)
添加到 Ilya Palkin 的答案:您甚至可以动态删除键:
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};
来源: