Switch语句返回未定义

时间:2019-10-19 17:43:34

标签: javascript

const recieved = [
            {
              "name": "1PM Industries Inc ",
              "series": [
                {
                  "value": 0.0001,
                  "name": "2019-08-30"
                },
                {
                  "value": 0,
                  "name": "2019-08-28"
                }
              ]
            }
          ]
    let output = recieved.map(o=>{
            let data = o.series.map((i)=>{ return {x: i.value, y: i.name}});
            return {id: o.name, data}
        });

    console.log(output)

我正在学习开关,并且正在尝试这个问题,我应该传递一个字符串,并且如果字符串的第一个字母是任何元素,则函数getLetter()应该返回“ A”在数组A中。与数组B,C,D类似。我尝试了上面的代码,但返回未定义。我在做什么错了?

2 个答案:

答案 0 :(得分:3)

您需要检查布尔值,例如true,因为您使用的是includes,它返回truefalse

顺便说一句,通过在每个return中使用case,您可以省略break,因为该函数以return退出,而function getLetter(s) { let letter = s[0]; // Write your code here let A = ['a', 'e', 'i', 'o', 'u']; let B = ['b', 'c', 'd', 'f', 'g']; let C = ['h', 'j', 'k', 'l', 'm']; let D = ['n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']; switch (true) { // <-- boolean value with strict comparison === case A.includes(letter): return 'A'; case B.includes(letter): return 'B'; case C.includes(letter): return 'C'; case D.includes(letter): return 'D'; } } var s = 'adam', t = getLetter(s); console.log(t);则退出switch statement好吧。

messages

答案 1 :(得分:1)

您可以使用find代替includes,当您将字符传递给switch()时,它会尝试将其与大小写匹配,因为includes返回true/false所以不会匹配任何情况

function getLetter(s) {
  let letter = s[0];
  let A = ['a', 'e', 'i', 'o', 'u'];
  let B = ['b', 'c', 'd', 'f', 'g'];
  let C = ['h', 'j', 'k', 'l', 'm'];
  let D = ['n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'];

  switch (letter) {
    case A.find(v => v === letter):
      return 'A';
    case B.find(v => v === letter):
      return 'B';
    case C.find(v => v === letter):
      return 'C';
    case D.find(v => v === letter):
      return 'D';
  }
}

s = 'adam';
t = getLetter(s);
console.log(t);