Использование карты для фильтрации и возврата нового объекта в es6 - PullRequest
1 голос
/ 17 октября 2019

У меня есть следующий код:

      allDesignDocs.rows.forEach((row: any) => {
        if (!designDocsName.includes(row.id.replace("_design/", ""))) {
          toBeRemoved = [{ _id: row.id, _rev: row.value.rev, "_deleted": true }, ...toBeRemoved];
        }

      });

, который отлично работает. Однако я хотел бы использовать подход обновления на месте. Поэтому я выбрал карту, а не foreach:

  var test = allDesignDocs.rows.map((row: any) => {
    if (!designDocsName.includes(row.id.replace("_design/", ""))) {
      return { _id: row.id, _rev: row.value.rev, "_deleted": true };
    }

  });

Поэтому вышеприведенное возвращает массивы, в том числе неопределенные, когда условие не выполняется. Я просто хочу, чтобы массив содержал значения, возвращаемые изнутри if и игнорировал все неопределенные. Я знаю, что могу зациклить результат и очистить его, но это не чистый способ. Есть ли какая-либо функция es6, которая может обеспечить вышеуказанную функциональность?

Ответы [ 2 ]

3 голосов
/ 17 октября 2019

Используйте filter () после map () для фильтрации undefined значений.

var test = allDesignDocs.rows.map((row: any) => {
   if (!designDocsName.includes(row.id.replace("_design/", ""))) {
     return { _id: row.id, _rev: row.value.rev, "_deleted": true };
   }
 }).filter(item => item !== undefined); // Can also use filter(item => item);

Или используйте Reduce () :

var test = allDesignDocs.rows.reduce((acc, row: any) => {
  if (!designDocsName.includes(row.id.replace("_design/", ""))) {
    acc.push({ _id: row.id, _rev: row.value.rev, "_deleted": true });
  }
  return acc;
}, []);
0 голосов
/ 17 октября 2019

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

Например:

[1,2,3,4].reduce((acc,n)=>{
    if (n % 2 == 0) {
        acc.push(n*4)
    }
    return acc;
},[])

, который выдаст список четных чисел * 4, альтернативно объедините .filter и .map.

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