我不明白为什么此代码在我的代码中会以这种方式工作

时间:2019-07-16 06:42:49

标签: javascript

我不确定是什么结果[i]? 我只想了解为什么此代码使用这种方式?

function countChars(string, character) {
  var result = string;
  var count = 0;
  var i = 0;
  while ( i < string.length) {
    if (result[i] === character) {
      count = count + 1 ;
    } 

我猜想这种方式可能有用。

string [i]

有没有理由将result [i]放在其中?

function countChars(string, character) {
  var result = string;
  var count = 0;
  var i = 0;
  while ( i < string.length) {
    if (result[i] === character) {
      count = count + 1 ;
    } 
    result.slice(0,1);
    i++
  }
  return count;
}

console.log(
  countChars("hello","h") // >> 1
)  

2 个答案:

答案 0 :(得分:1)

正在复制,因此原始字符串不会在可能具有破坏性的代码中进行修改-在您的代码中为结果。切片不会修改结果,因此代码实际上不会更改结果且该语句无用

这是可能发生的事情

  • 复制副本
  • 切片副本并测试第一个字符

function countChars(string, character) {
  var copy = string;
  var count = 0;
  while (copy.length) {
    if (copy[0] === character) {
      count++;
    } 
    copy = copy.slice(1); // destructive 
  }
  console.log("String:",string,"Copy:",copy); // copy empty here
  return count;
}

console.log(
  countChars("hello","h") // >> 1
)

答案 1 :(得分:0)

您可以复制string并删除第一个字符,直到长度为零。然后退出循环。不需要i,因为您只需要检查索引零处的第一个字符即可。

function countChars(string, character) {
    var rest = string,
        count = 0;

    while (rest.length) {
        if (rest[0] === character) {
            count++;
        } 
        rest = rest.slice(1);
    }
    return count;
}

console.log(countChars("hello", "h")); // 1