首页 > 解决方案 > JS 中代码战练习的问题,预填充数组;初级水平

问题描述

这是练习的页面链接: https ://www.codewars.com/kata/prefill-an-array/train/javascript

创建一个函数 prefill,它返回一个包含 n 个元素的数组,所有元素都具有相同的值 v。看看你是否可以在不使用循环的情况下做到这一点。

您必须验证输入:

如果 v 被省略,v 可以是任何东西(原始或其他),如果 n 为 0,则用 undefined 填充数组,如果 n 不是整数或整数格式的字符串(例如,'123'),则返回一个空数组 > =0, 抛出 TypeError 抛出 TypeError 时,消息应该是“n 无效”,在这里您将 n 替换为传递给函数的实际值。

我的代码:

function prefill(n, v) {

  if(n == 0) return [];

  if(!Number.isInteger(n) || n < 0 ){
    let TypeError = new Error;
    TypeError.name = "TypeError";
    TypeError.message = n + " is invalid";
    throw TypeError
  };

  return new Array(n).fill(v); 
}

它通过了除此之外的所有测试:应该以 n 作为布尔值抛出错误 测试通过:Value == 'TypeError' 测试通过:Value == 'true is invalid' 测试通过 prefill 没有以 n 为 false 抛出错误

谁能解释我为什么?我什至尝试直接输入 false 并且它不起作用:/

标签: javascript

解决方案


你快到了。if只是第一个语句中的一个简单问题。你需要严格检查。然后您还需要检查,'0'因为问题的描述允许使用整数格式的字符串

if(n === 0 || n === '0') return [];

然后评估问题,n因此返回一个空数组。但是你需要抛出错误以防.falsen == 0truefalse


推荐阅读