Уничтожение данных из многомерного массива - PullRequest
0 голосов
/ 10 июня 2019

У меня есть массив вложенных объектов, например:

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

Есть ли способ добраться до objIWant без необходимости повторения дважды, например:

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

Я надеялся, что смогу использовать деструктуризацию, но попытка что-то вроде [{ objIWant }] = objArr вернет только первое objIWant. Я что-то упускаю из-за деструктурирования синтаксиса, который позволил бы это? Большое спасибо!

Ответы [ 3 ]

1 голос
/ 10 июня 2019

Нет - единственный способ сделать это с помощью вложенных map вызовов.

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

Если вы можете сделать это, вы можете изменить myFunc:

myFunc({ objIWant }) {...}

А затем измените свой код, чтобы сделать это:

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

Но нельзя использовать деструктуризацию для выполнения того, что вы просите.

0 голосов
/ 10 июня 2019

Не уверен, что ваша структура должна возвращать массив объектов или массив значений каждого объекта. Но решение будет таким же: используйте .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}]
0 голосов
/ 10 июня 2019

Разрушение не сделает его чище. Это единственный способ разрушить свойства, которые вы хотите. Использование функции 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);
...