Путаница с массивом JavaScript.splice()

Я действительно смущен по этому поводу.

Я понимаю, что array.splice(startIndex, deleteLength, insertThing) вставил бы insertThing в результате splice() в startIndex и удалить deleteLengthстоит записей? ... так:

var a = [1,2,3,4,5];
var b = a.splice(1, 0, 'foo');
console.log(b);

Должен дать мне:

[1,'foo',2,3,4,5]

А также

console.log([1,2,3,4,5].splice(2, 0, 'foo'));

должен дать мне

[1,2,'foo',3,4,5]

и т.п.

Но по какой-то причине он дает мне просто пустой массив? Посмотрите: http://jsfiddle.net/trolleymusic/STmbp/3/

Спасибо:)

4 ответа

Решение

Функция "splice()" возвращает не затронутый массив, а массив удаленных элементов. Если вы ничего не удалите, результирующий массив будет пустым.

splice() изменяет исходный массив и возвращает массив удаленных элементов. Поскольку вы не просили удалить какие-либо элементы, вы получаете пустой массив. Он изменяет исходный массив для вставки новых элементов. Вы смотрели, чтобы увидеть, что это было? Ищите свой результат в a,

var a = [1,2,3,4,5];
var b = a.splice(1, 0, 'foo');
console.log(a);   // [1,'foo',2,3,4,5]
console.log(b);   // []

В выводе вашего jsFiddle, посмотрите результат в a здесь: http://jsfiddle.net/jfriend00/9cHre/.

array.splice Функция склеивает массив возвращает элементы, которые были удалены. Поскольку вы ничего не удаляете и просто используете для вставки элемента, он вернет пустой массив.

Я думаю, что это то, что вы хотите.

var a = [1,2,3,4,5]; 
a.splice(1, 0, 'foo'); 
var b = a;
console.log(b); 

У меня была эта проблема. «Метод splice () изменяет содержимое массива, удаляя или заменяя существующие элементы и / или добавляя новые элементы на место». https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Это будет работать:

      var a = [1,2,3,4,5];
a.splice(1,0,'Foo');
console.log(a);

Если вы хотите, чтобы это было внутри функции, вы можете сделать это:

      function placeInMiddle(arr){
     
     arr.splice(2,0, "foo");
      return arr;
    
}  
placeInMiddle([1,2,6,7])

Страница Array.prototype.splice() разработчика Mozilla более ясна, чем другие ресурсы, о том, как работает метод сращивания и как его можно реализовать, кратко описанное ниже!

      const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]
Другие вопросы по тегам