JS:Edge case问题 - 替换数组中的变量

时间:2016-02-21 18:18:45

标签: javascript arrays

编程测试随着边缘情况的失败而回归:

空数组 - 预期:[],而不是:[""]

简介: Western Suburbs槌球俱乐部有两类会员,即高级和公开会员。他们希望您提供申请表格的帮助,告诉潜在会员他们将被安排哪个类别。

要成为一名大四学生,成员必须年满55岁并且有一个大于7的差点。在这个槌球俱乐部,残障从-2到+26;玩家越好障碍越低。

输入

输入将包含一个列表,每个列表包含两个项目。每个列表包含单个潜在成员的信息。信息包括个人年龄的整数和个人差点的整数。

示例输入:

[[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]

输出

输出将包含一个字符串值列表(在Haskell中:Open或Senior),说明相应成员是否应被置于高级或开放类别中。

示例输出 [" Open"," Open"," Senior"," Open"," Open","高级"]

我的功能:

function openOrSenior(data){
  var c = [];
  var i;

  for (i = 0; i < data.length; ++i) {
    var person = data[i];
    var age = person[0];
    var handicap = person[1];

    // senior
    if ((age >= 55) && (handicap > 7))  {
      person = [];
      person.push("Senior");
    } else {
      person = [];
      person.push("Open");
    }

    c.push(person);
  }

  return c.join().split(',');
}

任何指针?

2 个答案:

答案 0 :(得分:1)

原因是

  1. 您正在将数组推送到c,而不仅仅是字符串

  2. 然后你正在做c.join().split(','),它将首先将这些数组合并成一个字符串(以相当微妙的方式),然后将该字符串拆分为分隔符(',')。 split的结果总是至少有一个条目长 - 如果数组没有出现分隔符(如果c在开始时为空则不会出现) ,你得到一个包含单个字符串的数组(如果c在开始时为空,则为空白数据集。)

  3. 例如,[].toString().split(",")[""],而不是[]

    解决方案是将字符串而不是数组推送到c然后直接返回(不是.join().split(','))。

    关于我上面的“相当微妙的方式”评论。如果你有一个数组数组,如下所示:

    var a = [ ["a", "b"], ["c", "d"], ["e", "f"] ];
    

    a.join()将遍历a中的每个条目,并在其上调用toString。由于a中的条目是数组,因此在toString上调用join与调用Array#toString相同(它只是['a', 'b'].toString()的定义方式),因此您最终会执行"a,b" 1}},它给你"c,d",然后与第二个条目("e,f")相同,然后再与第三个("a,b,c,d,e,f"),然后取出所有这些并制作一个单个字符串,中间有逗号(window.a = window.a)。

答案 1 :(得分:-1)

尝试以下方法:

function openOrSenior(data){
  function determineMembership(member){
    return (member[0] >= 55 && member[1] > 7) ? 'Senior' : 'Open';
  }
  return data.map(determineMembership);
}