Путаница с массивом JavaScript.splice () - PullRequest
11 голосов
/ 22 сентября 2011

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

Насколько я понимаю, 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/

Спасибо:)

Ответы [ 3 ]

15 голосов
/ 22 сентября 2011

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

4 голосов
/ 22 сентября 2011

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

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

var a = [1,2,3,4,5]; 
a.splice(1, 0, 'foo'); 
var b = a;
console.log(b); 
3 голосов
/ 22 сентября 2011

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/.

...