我有一个平面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)?
当前回答
使用lodash清洁和快速,有了这个解决方案,您可以删除多个键,也不改变原始对象。这在不同的情况下具有更强的可扩展性和可用性:
import * as _ from 'lodash';
function cloneAndRemove(
removeTheseKeys: string[],
cloneObject: any,
): object | never {
const temp = _.cloneDeep(cloneObject);
removeTheseKeys.forEach((key) => {
delete temp[key];
});
return temp;
}
export { cloneAndRemove };
其他回答
补充一下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};
演示在巴别塔REPL
来源:
https://twitter.com/ydkjs/status/699845396084846592
对于那些不能使用ES6的人,您可以使用lodash或下划线。
_.omit(x, 'b')
或者拉姆达。
R.omit('b', x)
我在这里使用对象解构。我已经将密码分离为变量,其余变量包含除密码之外的所有对象属性和值。注意:rest不是固定的关键字,你可以根据它来命名
const obj = {name:"john", password:"Abcds12@", id:"125455"} const{密码……Rest} = obj; console.log(休息);
您可以为它编写一个简单的helper函数。Lodash有一个同名的类似函数:省略
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快。然后分配和删除:http://jsperf.com/omit-key
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});