Увеличивается на 1 при использовании .map, а условие оценивается как true - PullRequest
0 голосов
/ 01 мая 2019

Мне трудно увеличить на 1, когда я использую .map для циклического прохождения массива myClasses, а когда status в массиве равно 'Open' или 'In Progress', увеличиваем число на 1. My цель состоит в том, чтобы общее количество классов было «Открыто» или «В процессе»

Это то, что я сейчас делаю

myClasses.map(a => (a.status === ('Open' || 'In Progress') ? 'Yes' : 'No'))

в настоящее время, когда класс открыт или находится в прогрессе, я просто выводю yes или no, но я хочу иметь возможность добавить 1 или 0 к числовой переменной.

Это то, что содержит массив myClasses

0: {id: "0000AK",  type: "Elective", status: "Open"       } 
1: {id: "597WUK",  type: "Core",     status: "Closed"     } 
2: {id: "082HCE",  type: "Core",     status: "In Progress"} 
3: {id: "091HSN",  type: "Elective", status: "Canceled"   } 
4: {id: "038GAQ",  type: "Core",     status: "Open"       } 

Прямо сейчас мой вывод выглядит так Yes,No,Yes,No,Yes Вместо этого я хочу, чтобы вывод был 3

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 01 мая 2019

Если вам нужен только счетчик, вы можете просто использовать filter и получить length возвращенного массива

const myClasses = [{id:"0000AK",type:"Elective",status:"Open"},{id:"597WUK",type:"Core",status:"Closed"},{id:"082HCE",type:"Core",status:"In Progress"},{id:"091HSN",type:"Elective",status:"Canceled"},{id:"038GAQ",type:"Core",status:"Open"}];

const count = myClasses.filter(a => a.status === 'Open' || a.status === 'In Progress').length

console.log(count)
2 голосов
/ 01 мая 2019

Вы можете взять счет в истинную часть троичного.

var myClasses = [{ id: "0000AK", type: "Elective", status: "Open" }, { id: "597WUK", type: "Core", status: "Closed" }, { id: "082HCE", type: "Core", status: "In Progress" }, { id: "091HSN", type: "Elective", status: "Canceled" }, { id: "038GAQ", type: "Core", status: "Open" }],
    count = 0,
    result = myClasses.map(({ status }) => status === 'Open' || status === 'In Progress'
        ? (count++, 'Yes')
        : 'No'
    );

console.log(count);
console.log(result);

Чтобы получить только количество, вы можете уменьшить массив. Если вы хотите проверить больше значений, вы можете взять массив или Set и проверить, содержит ли структура данных элемент.

var myClasses = [{ id: "0000AK", type: "Elective", status: "Open" }, { id: "597WUK", type: "Core", status: "Closed" }, { id: "082HCE", type: "Core", status: "In Progress" }, { id: "091HSN", type: "Elective", status: "Canceled" }, { id: "038GAQ", type: "Core", status: "Open" }],
    wanted = ['Open', 'In Progress'],
    count = myClasses.reduce((c, { status }) => c + wanted.includes(status), 0);

 console.log(count);
1 голос
/ 01 мая 2019

Как насчет? Массив уменьшить

const data = [
  { id: '0000AK', type: 'Elective', status: 'Open' },
  { id: '597WUK', type: 'Core', status: 'Closed' },
  { id: '082HCE', type: 'Core', status: 'In Progress' },
  { id: '091HSN', type: 'Elective', status: 'Canceled' },
  { id: '038GAQ', type: 'Core', status: 'Open' }
];

const res = data.reduce((acc, cur) => {
  const status = cur.status;
  if (status === 'Open' || status === 'In Progress') {
    return acc + 1;
  }
  return acc;
}, 0);
console.log(res);
0 голосов
/ 01 мая 2019

Я предлагаю вам использовать reduce() вместо map():

var count = myClasses.reduce((accumulator, item) => {
    if (item.status == 'Open' || item.status == 'In Progress') {
        return accumulator + 1;
    }
    return accumulator;
}, 0);

Обратите внимание, как я также изменил условие в операторе if для сравнения с каждым из двух значений, которые выхочу.

...