首页 > 解决方案 > 为什么变量会发生变化?

问题描述

我是 JavaScript 新手,所以我可能搞砸了一些简单的事情。

我目前正在代码战上练习 JS,并提示:

本练习的目标是将字符串转换为新字符串,其中如果该字符在原始字符串中仅出现一次,则新字符串中的每个字符为“(”,如果该字符在原始字符串中多次出现,则为“)”细绳。在确定字符是否重复时忽略大小写。

一些例子是:

"din" => "((("

"后退" => "()()()"

"成功" => ")())())"

"((@" => "))(("

这是我在练习中的尝试:

function duplicateEncode(word){
  word = word.toLowerCase().split(''); 
  var tempWord = word
  var newWord = [];
  var ii = 0;
  
  while (tempWord.length>0){
    ii ++;
    tempWord.splice(0,1);
    
    if (tempWord.includes(word[ii])){
      newWord.push("(");
    } else {
      newWord.push(")");
    }
  }
  return(newWord.join(''));
}

我遇到的问题发生在

tempWord.splice(0,1);

当调用该行时,它也会影响变量“word”。有人可以向我解释这里发生了什么吗?

标签: javascriptarraysstring

解决方案


var tempWord = word创建对单词数组的引用。

如果您想创建单词数组的副本,请尝试以下操作:

// ES6 way
const tempWord = [...word];

// older method
const tempWord = Array.from(word);

推荐阅读