Почему вывод .splice является одним объектом?

#javascript #arrays #sorting

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

Вопрос:

Я работаю над своим API. На этом этапе я хочу заменить первый объект массива, такой как:

Если заданные данные:

 const data = ["1", 2, 3, 4, 5, 6]
  

тогда я хочу:
ВЫВОД В ВИДЕ:

 ["New_text", 2, 3, 4, 5]
  

Для этого я попробовал функцию .splice:

 const new_data = data.splice(0, 1, "New_text")
  

Но я получаю [«1»] в качестве вывода. Как я могу это сделать?

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

1. вам нужен новый массив?

2. Array.splice возвращаемое значение — «Массив, содержащий удаленные элементы», data модифицируется на месте.

3. все в порядке, просто удалите последний элемент данных

4. @Nick Я знал, где я был неправ, из-за вашего комментария. Спасибо. Я просто понимаю, что мне нужно console.log(данные).

5. Почему бы просто не сделать data[0] = "New_text"

Ответ №1:

splice метод возвращает новый массив удаленных элементов. Это также изменяет исходный массив

Попробуйте

 const data = ['1', 2, 3, 4, 5, 6];
data.splice(0, 1);
data.unshift('New_text');
console.log(data);  

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

1. Вам нужно добавить data.pop() перед console.log

2. Не data[0] = "New_text" ли это проще, чем использовать 2 метода расширения массива?

Ответ №2:

Он работает правильно, но вы неправильно понимаете, как это работает:

 const deleted_data = data.splice(0, 1, "New_text");
console.log(deleted_data); // [1]
console.log(data);         // ["New_text", 2, 3, 4, 5, 6]
//            ^
//            |
//   NOTE: "data" itself is modified by splice
  

Если вы действительно хотите настаивать на том, чтобы добавленные данные были частью нового массива, вам нужно вручную скопировать старый массив в новый массив:

 const new_data = data.slice(); // copy old array
new_data.splice(0, 1, "New_text");
//   ^
//   |
// NOTE: new_data, not data !
  

Ответ №3:

метод splice отлично работает для вас. но если задача состоит только в том, чтобы изменить первый элемент в массиве, вы на самом деле вместо splice можете использовать это

 const data = ["1", 2, 3, 4, 5, 6]
data.shift()
data.unshift("New_text")
// or just 
data[0] = "New_text"
  

Ответ №4:

splice создает новый массив, состоящий ТОЛЬКО из элементов, которые вы удалили.

вам нужно поместить новый ‘New_text’ в исходный массив после использования splice,

попробуйте метод unshift, чтобы поместить ‘New_text’ в качестве первого элемента.