在js中将部分对象描述为新对象

时间:2018-01-10 10:55:29

标签: javascript

给定以下对象{a:1, b:2, c:3}我正在寻找es6语法来将对象的子集解构为新的对象,即:{b:2 ,c:3}

我发现这种语法使我省略了我不想要的属性: const {a,...newObj} = original

我如何做,包括属性名称。

4 个答案:

答案 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;
};