#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);