Я пытаюсь использовать деструктурирование элементов моего массива subItems, чтобы получить переменные, которые напрямую ссылаются на свойства links и open.
В частности, я пытаюсь использовать следующий код, который не работает, как указано в комментариях.

const [{links, open}] = subItems.map(({ items }) => {
  document.getElementById(items);
}); // Fails: returns nothing  

const {links, open} = subItems((items ) => {
  return items; 
}); // Fails: returns only the first `link` and `open`
      
// This is what the `subItems` array looks like:
export const subItems = [
  {
    links: [
      { title: 'ret', to: '#' },
      { title: 'def', to: '#' },
      { title: 'rev', to: '#' },
      { title: 'red', to: '#' },
      { title: 'im', to: '#' },
      { title: 'glossar', to: '#' }
    ],
    open: true
  },
  {
    links: [
      { title: 'recloud', to: '#' },
      { title: 'broker', to: '#' },
      { title: 'mercury', to: '#' },
      { title: 'investor', to: '#' }
    ],
    open: false
  }
];

P.S. Я новичок в JS, извините, если я неправильно понял что-то тривиальное.

0
Lazarchuk Viktor 19 Фев 2021 в 12:12

1 ответ

Лучший ответ

Выполняет ли это то, что вы пытаетесь сделать ?:

// Gets array (but you can get it any way you want, maybe by `import`)
const subItems = getSubItems();

// Loops through array (using `subItem` as the name for each array element)
for(subItem of subItems){

  // Destructures the current element in array (using `{...}` for objects)
  const {links, open} = subItem;

  // Collects links info (This is not needed -- just makes nicer printing)
  const linkString = links.reduce(
    (linkStr, link) => linkStr + `title:${link.title}, to:${link.to}; `,
    ""
  );

  // Does something with links and open (We could print `links` instead of linkString)
  console.log("links: ", linkString, "\nopen: ", open, "\n\n");
}
      
function getSubItems(){
  return [
    {
      links: [
        { title: 'ret', to: '#' },
        { title: 'def', to: '#' },
        { title: 'rev', to: '#' },
        { title: 'red', to: '#' },
        { title: 'im', to: '#' },
        { title: 'glossar', to: '#' }
      ],
      open: true
    },
    {
      links: [
        { title: 'recloud', to: '#' },
        { title: 'broker', to: '#' },
        { title: 'mercury', to: '#' },
        { title: 'investor', to: '#' }
      ],
      open: false
    }
  ];
}
1
Cat 19 Фев 2021 в 10:14