array.prototype.map () Нужно рассчитать, выиграл, проиграл, привязан для команды НФЛ - PullRequest
0 голосов
/ 06 февраля 2020

Я экспериментирую с методом массива .map () и не могу найти правильный синтаксис для генерации столбца «wlt» в моем объекте. «Wlt» обозначает Win, Loss или T ie.

В настоящее время я генерирую столбец «wlt» со следующим кодом:

    const scores = philadephiaEaglesScores.map(function(item){
    const obj = {
    "weekNumber": item.weekNumber, 
    "name": item.ourName, 
    "oppName": item.oppName, 
    "ourScore": item.ourScore,
    "oppScore":  item.oppScore,
    "wlt": item.ourScore - item.oppScore
    }
    return obj;
    });

Это работает и дает мне положительное число, если мы выиграли игру, отрицательное число, если мы проиграли, и 0, если игра была на ie.

. Я бы хотел перейти на следующий уровень и фактически сгенерировать строковое значение. из Won, Lost или T ie в первом примере кода.

Я могу заставить это работать, используя следующий код, но не могу заставить второй пример кода работать внутри первого примера кода.

    let winLossTie = philadephiaEaglesScores.map(item => {
    if (item.ourScore > item.oppScore) {
    return "W";
    } if (item.ourScore < item.oppScore) {
    return "L";
    } else {return "T"}
    }); 
My JSON data is listed below:
    const philadephiaEaglesScores = [
    {"weekNumber": "1","ourName": "Philadephia Eagles", "oppName": "Redskins", "ourScore": "32", 
    "oppScore": "27", "location": ""},
    {"weekNumber": "2","ourName": "Philadephia Eagles", "oppName": "Falcons", "ourScore": "20", 
    "oppScore": "27", "location": ""},
    {"weekNumber": "3","ourName": "Philadephia Eagles", "oppName": "Lions", "ourScore": "24", "oppScore": 
    "27", "location": ""},
    {"weekNumber": "4","ourName": "Philadephia Eagles", "oppName": "Packers", "ourScore": "34", 
    "oppScore": "27", "location": ""},
    {"weekNumber": "5","ourName": "Philadephia Eagles", "oppName": "Packers", "ourScore": "31", 
    "oppScore": "6", "location": ""},
    {"weekNumber": "6","ourName": "Philadephia Eagles", "oppName": "Vikings", "ourScore": "20", 
    "oppScore": "38", "location": ""},
    {"weekNumber": "7","ourName": "Philadephia Eagles", "oppName": "Cowboys", "ourScore": "10", 
    "oppScore": "37", "location": ""},
    {"weekNumber": "8","ourName": "Philadephia Eagles", "oppName": "Bills", "ourScore": "31", "oppScore": 
    "13", "location": ""},
    {"weekNumber": "9","ourName": "Philadephia Eagles", "oppName": "Bears", "ourScore": "22", "oppScore": 
    "14", "location": ""},
    {"weekNumber": "11","ourName": "Philadephia Eagles", "oppName": "Patriots", "ourScore": "10", 
    "oppScore": "17", "location": ""},
    {"weekNumber": "12","ourName": "Philadephia Eagles", "oppName": "Seahawks", "ourScore": "9", 
    "oppScore": "17", "location": ""},
    {"weekNumber": "13","ourName": "Philadephia Eagles", "oppName": "Dolphins", "ourScore": "31", 
    "oppScore": "37", "location": ""},
    {"weekNumber": "14","ourName": "Philadephia Eagles", "oppName": "Giants", "ourScore": "23", 
    "oppScore": "17", "location": ""},
    {"weekNumber": "15","ourName": "Philadephia Eagles", "oppName": "Redskins", "ourScore": "37", 
    "oppScore": "27", "location": ""},
    {"weekNumber": "16","ourName": "Philadephia Eagles", "oppName": "Cowboys", "ourScore": "17", 
    "oppScore": "9", "location": ""},
    {"weekNumber": "17","ourName": "Philadephia Eagles", "oppName": "Giants", "ourScore": "37", 
    "oppScore": "17", "location": ""},
    ];

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

В первом коде измените:

"wlt": item.ourScore - item.oppScore

на:

"wlt": "LTW"[1+Math.sign(item.ourScore - item.oppScore)]

На самом деле вы не можете использовать вторую функцию, в которой вы итерируете массив whole . Это сработало бы, если бы эта функция принимала в качестве аргумента один объект из массива и просто возвращала бы строку, применимую только для этого объекта. Затем вы можете вызвать эту функцию следующим образом:

"wlt": winLossTie(item)

Итак, чтобы было ясно, функция должна измениться на следующее:

function winLossTie(item) {
  if (item.ourScore > item.oppScore) {
    return "W";
  } if (item.ourScore < item.oppScore) {
    return "L";
  } else {
    return "T"
  }
}); 

Но ярлык, используя Math.sign (возвращает -1, 0 или 1), делает его достаточно коротким, чтобы вообще не нуждаться в отдельной функции.

0 голосов
/ 06 февраля 2020

Вы можете использовать троичный оператор замены для оператора if / else.

Это будет выглядеть так:

    const scores = philadephiaEaglesScores.map(function(item){
    const obj = {
    "weekNumber": item.weekNumber, 
    "name": item.ourName, 
    "oppName": item.oppName, 
    "ourScore": item.ourScore,
    "oppScore":  item.oppScore,
    "wlt": item.ourScore > item.oppScore ? "W" : item.ourScore < item.oppScore ? "L" : "T"
    }
    return obj;
    });

Возможно, вы захотите разделить троичный оператор на выражение / выражение / функция для более чистого кода.

...