给定以下对象{a:1, b:2, c:3}
我正在寻找es6语法来将对象的子集解构为新的对象,即:{b:2 ,c:3}
。
我发现这种语法使我省略了我不想要的属性:
const {a,...newObj} = original
。
我如何做,包括属性名称。
答案 0 :(得分:3)
我更喜欢执行以下操作
import { MyComponent as MyOtherComponent } from ...
它使我可以在不创建中间变量或对象的情况下获取新对象。
例如-
( ({key1, key2}) => ({ key1, key2 }) )(obj);
答案 1 :(得分:2)
您可以选择您想要的属性,如下所示。新变量的名称应与属性名称相同。然后,您可以创建一个包含所选属性的新对象。
var obj = {a:1, b:2, c:3};
var {b, c} = obj;//pick property b and c
var newObj = {b, c}; //shortcut for {b:b, c:c} in ES-6
console.log(newObj);

答案 2 :(得分:1)
我不确定你真正想要的是什么。但据我所知,这将对你有所帮助。
例如
我有初始对象
{ a: 10, b: 20, c: 100 }
我要提取的属性是 a,b
我想创建一个新对象 c ,其属性为 b,c
以下是如何完成的。使用破坏性分配。这里的输出将是 20 ,就像在初始对象中一样。
({ a, b } = { a: 10, b: 20, c: 100 });
let c = {a: a, b: b};
console.log(c.b);
MDN文档进行破坏性分配。 link
答案 3 :(得分:0)
如果您从原始Javascript切换为其超集Typescript,这将变得更加容易。为此,我做了几个功能:
要过滤对象中的选定字段。您可以使用以下内容:
/**
* Return a subset object of the source object containing only listed fields
* @param source Source object
* @param fields List of source object's fields to be included in a returning object
*/
export const subset = <T>(source: T, ...fields: (keyof T)[]): Partial<T> => {
return fields.reduce((prev, field) => ({
...prev,
[field]: source[field],
}), {});
};
要通过列出要排除的字段进行过滤,请执行以下操作:
/**
* Return a subset object of the source object with listed fields excluded
* @param source Source object
* @param fields List of source object's fields to be included in a returning object
*/
export const exclude = <T>(source: T, ...fields: (keyof T)[]): Partial<T> => {
const result: Partial<T> = { ...source, };
fields.forEach(field => delete result[field]);
return result;
};