Почему изменяется переменная?

#javascript #arrays #string

#javascript #массивы #строка

Вопрос:

Я новичок в JavaScript, поэтому, возможно, я напутал что-то простое.

В настоящее время я практикую JS в codewars и получаю подсказку:

Цель этого упражнения — преобразовать строку в новую строку, где каждый символ в новой строке равен «(«, если этот символ появляется только один раз в исходной строке, или «)», если этот символ появляется более одного раза в исходной строке. Игнорируйте заглавные буквы при определении, является ли символ дубликатом.

Вот некоторые примеры:

«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».
Может кто-нибудь объяснить мне, что здесь происходит?

Комментарии:

1. tempWord = word не создает копию. У вас есть два имени, ссылающихся на один и тот же массив.

2. word является массивом , поэтому tempWord является ссылкой на тот же массив. Присвоение не создает копию.

Ответ №1:

var tempWord = word Создайте ссылку на слово array.

если вы хотите создать копию массива word, попробуйте это:

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

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