从多维数组解构数据

时间:2019-06-10 03:10:21

标签: javascript arrays object multidimensional-array ecmascript-6

我有一个嵌套对象数组,如下所示:

const objArr = [{obj, obj, objIWant}, {obj, obj, objIWant}, {obj, obj, objIWant}]

有没有一种方法可以到达objIWant而不必像这样循环两次:

ObjArr.map((obj)=> obj.map(({ objIWant }) => myFunc(objIWant)))

我希望可以利用解构,但是尝试使用[{ objIWant }] = objArr之类的方法只会返回第一个objIWant。我是否缺少有关允许这样做的解构语法的内容?非常感谢!

3 个答案:

答案 0 :(得分:1)

否-唯一的方法是使用嵌套的map调用。

ObjArr.map(obj => obj.map(({ objIWant }) => myFunc(objIWant));

如果可以的话,您可以更改myFunc

myFunc({ objIWant }) {...}

然后更改您的代码以执行此操作:

ObjArr.map(obj => obj.map(myFunc));

但是无法使用解构来完成您要问的事情。

答案 1 :(得分:0)

解构不会使其看起来更干净。这是解构所需属性的唯一方法。像现在一样使用map函数是一种更干净的方法。

const objArr = [{obj:1, obj2:2, objIWant:3}, {obj:4, obj2:5, objIWant:6}, {obj:7, obj2:8, objIWant:9}];
const [{objIWant}, {objIWant:test2}, {objIWant:test3}] = objArr;

window.console.log(objIWant);
window.console.log(test2);
window.console.log(test3);

答案 2 :(得分:0)

不确定是否希望您的结构返回对象数组-或每个对象的值数组。但是解决方案是相同的-在原始数组上使用.map()返回所需的值(或对象)。

const objArr = [
  {id: 1, name: 'first item', value: 1},
  {id: 2, name: 'second item', value: 2},
  {id: 3, name: 'third item', value: 3}
];

const objIWant = 'value';
const result = objArr.map(item => item[objIWant]);

console.log(result);
// expected output: Array ["1", "2", "3"]

如果它是嵌套对象,则同样处理-在原始数组上使用.map()构造所需对象的新数组。

  const objArr = [
    {"obj": {id: 1}, "obj": { id:1 } , "objIWant": { id:1 }},
    {"obj": {id: 1}, "obj": { id:1 } , "objIWant": { id:2 }},
    {"obj": {id: 1}, "obj": { id:1 } , "objIWant": { id:3 }}
  ];

    const objIWant = 'objIWant';
    const result = objArr.map(item => item[objIWant]);

    console.log(result);
    // expected output: Array [{"id": 1},{"id": 2},{"id": 3}]