JavaScript中charAt方法的替代方法

时间:2019-12-28 04:52:08

标签: javascript

这是手头的任务:

  

编写一个名为charAt的函数,该函数接受字符串和索引(数字)并返回该索引处的字符。

     

如果数字大于字符串的长度,则该函数应返回一个空字符串。

更重要的是,您不能使用内置的charAt方法。

除了不包含if语句之外,我是否还在正确地执行要求?另外,正确的实现是什么样的? (对JS来说是新手,所以我先向您道歉)。

function charAt(string, index) {
  var charAt = string[index];
  return charAt;
}

1 个答案:

答案 0 :(得分:7)

看起来很不错,除了一个问题-有许多 odd 字符(由代理对组成,有时也称为多字节字符),它们在一个索引中占用多个索引串。 ?就是一个例子。如果字符串包含这样的字符,它将在字符串中计为两个标记:

function charAt(string, index) {
  var charAt = string[index];
  return charAt;
}
console.log(
  charAt('foo?bar', 3), // Broken character, wrong
  charAt('foo?bar', 4), // Broken character, wrong
  charAt('foo?bar', 5), // Wrong character (should be "a", not "b")
  charAt('foo?bar', 6), // Wrong character (should be "r", not "a")
);

如果这是您可能遇到的问题,请考虑使用Array.from首先将其转换为数组:

function charAt(string, index) {
  var charAt = Array.from(string)[index];
  return charAt;
}
console.log(
  charAt('foo?bar', 3),
  charAt('foo?bar', 4),
  charAt('foo?bar', 5),
  charAt('foo?bar', 6),
);

或者,当索引不存在时返回空字符串:

function charAt(string, index) {
  return Array.from(string)[index] || '';
}
console.log(
  charAt('foo?bar', 3),
  charAt('foo?bar', 4),
  charAt('foo?bar', 5),
  charAt('foo?bar', 6),
);
console.log(charAt('foo?bar', 123));