JS - сопоставить объект для извлечения информации и создания нового объекта - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь перебрать существующий объект, извлечь некоторые значения и присвоить извлеченные значения новому объекту.

article.author.id и article.author.name взяты из статей объект. ключ 'active' является новым и по умолчанию будет иметь значение true для всех. объект.

Я добился того, что мне нужно, с помощью Map, но Map хранит только пары ключ => значение, поэтому мне некуда было прикрепить «активный» ключ.

const extractAuthors = (articles) => {
        let authorMap = new Map();
        articles.map(article => {
            if(!authorMap.has(article.author.id)) {
                authorMap.set(article.author.id, article.author.name)
            }
        })
        return authorMap;
    };

Отредактировано : Следуя комментариям, это версия карты, которая работает:

const extractAuthors = (articles) => {
        let authorMap = new Map();
        articles.forEach(article => {
            if(!authorMap.has(article.author.id)) {
                authorMap.set(article.author.id, {name: article.author.name, active: 'true'})
            }
        })
        return authorMap;
    };

Из любопытства, как бы это было сделано правильно как объект?

1 Ответ

1 голос
/ 21 июня 2020

В вашем коде есть синтаксическая ошибка. Я взял на себя смелость отредактировать несколько вещей. Это должно помочь:

const extractAuthors = (articles) => {
  const authorObj = {}; // for maintaining uniqueness
  const authors = []; // aggregating unique authors

  for (const article of articles) {
    const id = article.author.id;
    if (!authorObj[id]) {
      authorObj[id] = true;
      authors.push({ ...article.author, active: true });
    }
  }
  console.log("Authors aggragated: ", authors);
};

const articles = [
  { author: { id: "id1", name: "name1" } },
  { author: { id: "id2", name: "name2" } },
  { author: { id: "id1", name: "name3" } },
];

extractAuthors(articles);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...