JS:边缘情况问题 - 替换数组中的变量

JS: Edge case issue - replacing variable in array

本文关键字:数组 变量 替换 边缘 情况 问题 JS      更新时间:2023-09-26

编程测试返回边缘情况失败:

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

短:西郊槌球俱乐部有两类会员,高级和公开。他们需要您帮助填写申请表,该表格将告诉潜在成员他们将被安置在哪个类别。

要成为老年人,会员必须年满 55 岁且残疾超过 7。在这个槌球俱乐部中,让分范围从 -2 到 +26;球员越好,让分越低。

输入

输入将包括一个列表列表,每个列表包含两个项目。每个列表都包含单个潜在成员的信息。信息由表示该人的年龄的整数和表示该人的残疾的整数组成。

示例输入:

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

输出

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

示例输出["

开放"、"开放"、"高级"、"开放"、"开放"、"高级"]

我的职能:

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(',');
}

有什么指示吗?

原因是

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

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

例如,[].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",然后与第二个条目("c,d")相同,然后再次与第三个条目("e,f"),然后取所有这些并从中制作一个字符串, 中间有逗号 ( "a,b,c,d,e,f" )。

尝试以下操作:

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