Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6中简单的数组/对象分解_Javascript_Ecmascript 6_Destructuring - Fatal编程技术网

Javascript ES6中简单的数组/对象分解

Javascript ES6中简单的数组/对象分解,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,我正在尝试返回带有选定键的新对象-reqProps。我设法用修复道具prop1、prop3实现了这一点,现在我希望能够传递reqProps数组值来替换prop1、prop3。我尝试了函数、字符串和一些“hack”。他们都不工作 const data = [ { prop1: 1, prop2: 2, prop3: 3 }, { prop1: 10, prop2: 20, prop3: 30 }, { prop2: 200

我正在尝试返回带有选定键的新对象-reqProps。我设法用修复道具prop1、prop3实现了这一点,现在我希望能够传递reqProps数组值来替换prop1、prop3。我尝试了函数、字符串和一些“hack”。他们都不工作

const data = [
  {
    prop1: 1,
    prop2: 2,
    prop3: 3
  },
  {
    prop1: 10,
    prop2: 20,
    prop3: 30
  },
  {
    prop2: 200,
    prop4: 400
  },
  {
    prop3: 3000
  }
];

// to return properties for the following...
const reqProps = ['prop2','prop3','prop4'];

// current implementation fixing return object with prop1, prop3
const obj = data.map(({prop1, prop3}) => {
    return {prop1, prop3};
});
目前,obj的结果是

[{"prop1":1,"prop3":3},{"prop1":10,"prop3":30},{},{"prop3":3000}]

我不想使用循环,就像分解结构的“力量”;)

如果您坚持进行分解,则必须使用
eval

const reqProps = ['prop2','prop3','prop4'];

const literalString = '{'+reqProps.join(',')+'}';

const obj = data.map(new Function(literalString, 'return '+literalString));

你真的应该使用循环-你也可以将它隐藏在助手函数中,或者只使用
reduce
如果你坚持要解构,你必须使用
eval

const reqProps = ['prop2','prop3','prop4'];

const literalString = '{'+reqProps.join(',')+'}';

const obj = data.map(new Function(literalString, 'return '+literalString));

你真的应该使用循环-你也可以将它隐藏在助手函数中,或者只使用
reduce

正如@Bergi所建议的,你最好以某种方式使用循环

这里有一个隐式循环的变体:

data.map(o => reqProps.filter(p => p in o)
                      .reduce((acc, p) => ({...acc, [p]: o[p]}), {}))

正如@Bergi所建议的,您最好以某种方式使用循环

这里有一个隐式循环的变体:

data.map(o => reqProps.filter(p => p in o)
                      .reduce((acc, p) => ({...acc, [p]: o[p]}), {}))

你想干什么?使用数组中的字符串进行分解?你想做什么?是否使用数组中的字符串进行分解?