Создавайте и заполняйте массив динамически с помощью javascript

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть массив языков программирования, таких как:

 const tags = ["js", "ruby", "ios", "python", "go"];
 

У меня также есть список таких пользователей, как:

 const user = [
  {
    "id": "userId_1",
    "language": ["ruby", "ios"]
  }, 
  ...
];
 

Есть ли хороший способ заполнить массив, названный именем языка, идентификаторами пользователей?

Что — то вроде:

 const ruby = ["userId_1", "userId_3", "userId_8", ...];
 

Комментарии:

1. Имя переменной не будет переведено, вы должны охватить его.

2. он имел в виду id , а не имя переменной.

3. @WilliamWang я имел в виду, что имя переменной ruby стирается. Вы должны сохранить его в имени с ограниченной областью действия.

4. ах, да, правильно. согласно моему ответу, мы должны вызвать его по output.ruby , …

Ответ №1:

Вы можете использовать Array.reduce() .

 const tags = ["js", "ruby", "ios", "python", "go"];

const user = [
  {
    "id": "userId_1",
    "language": ["ruby", "ios"]
  }, 
  {
    "id": "userId_2",
    "language": ["ruby", "python"]
  }, 
  {
    "id": "userId_3",
    "language": ["go", "ios"]
  }, 
];

const output = user.reduce((acc, cur) => {
  cur.language.forEach(lang => {
    if (!acc[lang]) acc[lang] = [];
    acc[lang].push(cur.id);
  });
  return acc;
}, {});

console.log(output); 

Комментарии:

1. Вам даже не нужен массив тегов, верно?

2. исправьте на данный момент, просто теги понадобятся, если вам нужны все теги в выходных данных для рефакторинга выходных данных.

3. Хм, у меня получилось что-то вроде { '[object Object]': [ 'userId_1', 'userId_2',

4. можете ли вы запустить приведенный выше фрагмент кода? результат говорит { "ruby": [ "userId_1", "userId_2" ], "ios": [ "userId_1", "userId_3" ], "python": [ "userId_2" ], "go": [ "userId_3" ] }

5. Да, неважно, что у моего «кода реального мира» только что возникла проблема с типом (по сути, язык — это объект! Спасибо за твою помощь, парень!

Ответ №2:

Неплохо было бы что-нибудь покороче:

 const ruby = user.map((user) => user.language.includes("ruby") ? user.id : undefined);