传递空字符串时返回空数组

时间:2018-03-28 16:29:55

标签: javascript arrays string

我以前做过类似的练习,并且总是想出来,但我仍然坚持最愚蠢的事情。 我正在做经典"得到中间人物' (这个函数接受一个字符串并返回一个包含每个单词的中间字符的数组。如果单词是偶数长度那么你应该找到中间的两个字符)并且我认为我的代码应该适用于所有测试但是空字符串一个。 当一个空字符串""传递后,它应该返回一个空数组[],一个偶数指定这样做,它返回""。

到目前为止,这是我的代码:

function getMiddleChars (str) {
 let empty =[];
 let middle = str.length /2;
 for(let i =0; i<str.length; i++){
  if(str === ""){
    return empty;
  }else if(str.length %2 == 0){
     return str.slice(middle -1, middle +1);
   }
 }
 return str.charAt(middle);

}
returns [] when passed "":
     AssertionError: expected '' to deeply equal []

有人能帮我一把吗?提前谢谢。

编辑:

function getMiddleChars (str) {
 let solution = [];
 let middle = str.length /2;
  if(str === ""){
   return [];
 } if(str.length %2 === 0){
   return solution.push(str.slice(middle -1, middle +1));
 } else {
   return solution.push(str.charAt(middle));
 }
}

仍然没有工作。我很确定我可以解决这个问题而且我现在已经迷失了。

2 个答案:

答案 0 :(得分:2)

您可以将此作为您功能的第一步:

if(str === "")
{
    return [];
}

答案 1 :(得分:2)

将字符串拆分为单词,使用Array.map()进行迭代,并返回每个单词的中间字符:

function getMiddleChars(str) {
  return str ? str.split(/\s+/).map((word) => {
    const middle = (word.length - 1) / 2;

    return word.substring(Math.floor(middle), Math.ceil(middle) + 1);
  }) : [];
}

console.log(getMiddleChars('cats')); // ["a", "t"]
console.log(getMiddleChars('cat')); // ["a"]
console.log(getMiddleChars('a')); // ["a"]
console.log(getMiddleChars('hello world')); // ["l", 'r']
console.log(getMiddleChars('')); // []