ES6中按键过滤对象属性

497

假设我有一个对象:

{
  item1: { key: 'sdfd', value:'sdfd' },
  item2: { key: 'sdfd', value:'sdfd' },
  item3: { key: 'sdfd', value:'sdfd' }
}

我想通过过滤上面的对象来创建另一个对象,使我得到类似的东西。

 {
    item1: { key: 'sdfd', value:'sdfd' },
    item3: { key: 'sdfd', value:'sdfd' }
 }

我希望用ES6的扩展运算符来实现一个简洁的方法。


ES6没有对象展开运算符,而且在这里你也不需要它们。 - Bergi
1
可能是JavaScript:filter()用于对象的重复问题。 - Jonathan H
@DanDascalescu 但是这个答案提供了一种ES6的方法来完成OP所要求的,不是吗? - Jonathan H
2
如果我想按键/值进行过滤怎么办? - jmchauv
31个回答

0

我只是想把这段代码记录在某个地方。该代码使用代理来实现:

  1. 一个带有一组固定键的对象和
  2. 一个模板对象,它生成一个派生对象,该对象仅具有已分配值的模板中的这些键。

const unlock = Symbol("unlock");
const lock = (o) =>
  new Proxy(o, {
    get: (target, property) =>
      property === unlock ? target : Reflect.get(target, property),
    set: (target, key, value) =>
      o.hasOwnProperty(key) ? Reflect.set(target, key, value) : true,
  });

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const result = Object.assign(lock(obj1), obj2)[unlock];

console.log(result); // { a: 1, b: 3 }
console.log(result === obj1); // true



const derived = Symbol("derived");
const template = (o) =>
  new Proxy(Object.create(null), {
    get: (target, property) =>
      property === derived ? target : Reflect.get(target, property),
    set: (target, key, value) =>
      o.hasOwnProperty(key) ? Reflect.set(target, key, value) : true,
  });

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const result = Object.assign(template(obj1), obj2)[derived];

console.log(result); // { b: 3 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接