оператор if / else в функции карты? - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу использовать функцию map в javascript для зацикливания массива данных типа, но я получаю ошибку для следующего синтаксиса:

function porti(scores) {
const test = scores.map(pass, fail) => {
    if (scores < 75){
      test.fail
    } else {
      test.pass
    }
    return {pass, fail}
  }

}

вывод должен быть, если оценка <75: сбойостальное: pass </p>

console.log(porti([80, 45, 90, 65, 74, 100, 85, 30]));
// { pass: [ 80, 90, 100, 85 ], fail: [ 45, 65, 74, 30 ] }

console.log(porti([]));
// { pass: [], fail: [] }

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Как упомянуто выше. .Map () лучше всего сохранять, когда вы хотите вернуть массив, манипулируя предыдущим массивом.Если вы не хотите использовать ваниль для цикла.Вы можете попробовать это

const testScores = [...someArray of numbers]
function porti(tesScores) {    
const result = {
   pass: [],
   fail: []
}
    for (let score of testScores) {
        if (score < 75) {
           result.fail.push(score)
         } else {
           result.pass.push(score)
         }
  return result      
}}
0 голосов
/ 24 сентября 2018

Вы неправильно поняли, как использовать .map, требуется 3 параметра: 1 - currentValue, 2 - index, 3 - array.currentValue - это элемент, обрабатываемый в текущей итерации, index - индекс currentValue в массиве, а array - массив, для которого вызывается .map.

Подробнее о .map можно прочитать здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Вот пример того, как сделать то, что вы хотите с .map

function porti(scores) {
  var pass = [], fail = [];
  const test = scores.map(n => {
    if (n < 75) {
      fail.push(n);
    } else {
      pass.push(n);
    }
  });
  return {pass, fail};
}

console.log(porti([80, 45, 90, 65, 74, 100, 85, 30]));
0 голосов
/ 24 сентября 2018

Вы можете интегрировать чек как троичный для получения ключа для нажатия.

function porti(scores) {
    var result = { pass: [], fail: [] },
        score;

    for (score of scores) {
        result[score < 75 ? 'fail': 'pass'].push(score);
    }
    return result
}

console.log(porti([80, 45, 90, 65, 74, 100, 85, 30]));
console.log(porti([]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 24 сентября 2018

Я думаю, уменьшить было бы лучше для этой ситуации.Это позволит нам уменьшить массив до объекта из двух массивов элементов.

let items = [80, 45, 90, 65, 74, 100, 85, 30]

let result = items.reduce((obj, item) => {
  item < 75 ? obj.fail.push(item) : obj.pass.push(item)
  return obj
}, {pass:[], fail:[]})

console.log(result)

Если вы хотите использовать фильтр, вы можете ...

let items = [80, 45, 90, 65, 74, 100, 85, 30]

let result = {
  pass: items.filter(i => i >= 75),
  fail: items.filter(i => i < 75)
}

console.log(result)

А вот как мы можем сделать это с forEach ...

let items = [80, 45, 90, 65, 74, 100, 85, 30]

let result = {pass:[], fail:[]}
items.forEach(itm => itm < 75 ? result.fail.push(itm) : result.pass.push(itm))

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