我有一个平面JS对象:

{a: 1, b: 2, c: 3, ..., z:26}

我想克隆对象除了一个元素:

{a: 1, c: 3, ..., z:26}

最简单的方法是什么(如果可能的话,更倾向于使用es6/7)?


当前回答

我在这里使用对象解构。我已经将密码分离为变量,其余变量包含除密码之外的所有对象属性和值。注意:rest不是固定的关键字,你可以根据它来命名

const obj = {name:"john", password:"Abcds12@", id:"125455"} const{密码……Rest} = obj; console.log(休息);

其他回答

你可以使用lodash库来实现这个目的(如果你需要在一个项目中使用大量的数组/对象数组/对象)。

使用lodash deepclone函数你可以做:

const _obj = _.cloneDeep(obj);
delete _obj.key;

首先将整个对象克隆为新的对象,然后从克隆对象中删除所需的键,这样原始的键就不会受到影响。

Lodash省略

let source = //{a: 1, b: 2, c: 3, ..., z:26}
let copySansProperty = _.omit(source, 'b');
// {a: 1, c: 3, ..., z:26}

这里有一个Typescript方法可以做到这一点。期望2个参数,对象和一个包含键的字符串数组被删除:

removeKeys(object: { [key: string]: any }, keys: string[]): { [key: string]: any } {
  const ret: { [key: string]: any } = {};

  for (const key in object) {
    if (!keys.includes(key)) {
      ret[key] = object[key];
    }
  }

  return ret;
}

我不知道你到底想用这个做什么,所以我不确定这是否适合你,但我只是做了以下工作,它适用于我的用例:

const newObj ={...obj, [key]: undefined}

补充一下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