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

Это то, чем я сейчас занимаюсь

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

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

0
CatGirl19 1 Май 2019 в 18:20

4 ответа

Лучший ответ

Если вам нужен только счет, вы можете просто использовать 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)
3
adiga 1 Май 2019 в 15:27

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

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);
1
Code-Apprentice 1 Май 2019 в 15:32

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

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);
2
Nina Scholz 1 Май 2019 в 15:30

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

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

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

0
adiga 1 Май 2019 в 15:32