JavaScript: обращение массива и объединение не работают должным образом для пустых токенов в методе join()

#javascript #arrays

#javascript #массивы

Вопрос:

Я пытаюсь обратить строку и применить метод join() к обратному содержимому в JavaScript. Объединение работает должным образом, когда я использую «-» или любой другой символ в методе join(). Но когда я использую только («») или («» «) , он просто присоединяется к исходному массиву, а не к обратному. Пожалуйста, помогите мне понять фактическое поведение.

Рассмотрим приведенный ниже код.

 var a = [1,2,3]; //actual array
console.log(a.reverse().join("-")); // working as expected. output: "3-2-1"
console.log(a.reverse().join(""));  //not working as expected. output:"123"  

Спасибо,
Dhinesh

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

1. Как написано в документации developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… «Обращение является разрушительным. Это также изменяет исходный массив.»

2. просто добавляю к первому комментарию… Итак, вы дважды перевернули свой массив… чтобы это выглядело так, как будто второе a.reverse() не работало должным образом, в то время как оно перевернуло уже перевернутый массив

Ответ №1:

Обращение изменяет исходный массив

Метод reverse() возвращает массив на место. Первый элемент массива становится последним, а последний элемент массива становится первым.

В этом случае вы можете сделать неглубокую копию, а затем использовать reverse

 var a = [1,2,3]; //actual array
console.log([...a].reverse().join("-")); // working as expected. output: "3-2-1"
console.log([...a].reverse().join(""));   

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

1. a.slice().reverse() я думаю, что лучше, чем создавать мелкую копию.

2. @MaheerAli, который делает то же самое, только срез

Ответ №2:

reverse измените элементы в исходном массиве на обратные.

Обратный метод транспонирует элементы вызывающего объекта array на место, изменяя массив и возвращая ссылку на массив.

 var a = [1,2,3]; //actual array
console.log(a.reverse().join("-")); // working as expected. output: "3-2-1"
console.log(a.join(""));  //working as expected. output:"321"  

Ответ №3:

Это всего лишь проблема работы с одним и тем же массивом и выполнения двух обратных операций. Давайте попробуем сделать это:

 var a = [1,2,3]; 
const reversedArr = a.reverse();
console.log(reversedArr.join("-")); 
console.log(reversedArr.join(""));