замените фильтр и отобразите с помощью Reducer ES6 - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь избежать сцепления с фильтром и картой, но почему мое уменьшение вернуло неопределенное?

const data = [{
        value: "moto",
        passed: true
    },{
        value: "boat",
        passed: false
    }, {
        value: "car",
        passed: true
    }]

    // expected ['moto', 'car']
    // using filter and map
    data.filter(obj => obj.passed).map(obj => obj.value)

Что не так?data.reduce((accum, obj) => obj.checked && [...accum, obj.value], [])

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Это потому, что вы ничего не возвращаете, если obj.passed = false.Обновлено ниже.Просьба проверить

const data = [{
        value: "moto",
        passed: true
    },{
        value: "boat",
        passed: false
    }, {
        value: "car",
        passed: true
    }]

console.log(data.reduce((accum, obj) => 
              obj.passed 
                ? accum.concat(obj.value) 
                : accum
           , []))
0 голосов
/ 19 ноября 2018

Вы можете сделать:

const data = [{value: "moto",passed: true}, {value: "boat",passed: false}, {value: "car",passed: true}];
const result = data.reduce((a, c) => c.passed ? (a.push(c.value), a) : a, []);

console.log(result);
0 голосов
/ 19 ноября 2018
 (accum, obj) => obj.checked && [...accum, obj.value]

не возвращает отфильтрованный список, если объект не проверен.

(accum, obj) => {
  if (obj.checked) accum.push(obj.value)
  return accum;
}

как функция редуктора сделает это.

или сохранить его как единый вклад, чтобы не было удобочитаемости:

(accum, obj) => obj.checked ? [...accum, obj.value] : accum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...