2016-10-02 3 views
0

У меня есть массив-подобный объект:добавления/удаления элементов массива, как объект

[1:Array[10], 2: Array[2], 3: Array[2], 4: Array[2], 5: Array[3], 6: Array[1]]

Im пытается удалить первые два элемента, сделать некоторые вещи, а затем вставить их снова на то же место.

Вот что я делаю:

array = Array.prototype.splice.call(array, 0,2); 

При входе array в Firefox это показать это:

Array [ <2 empty slots>, Array[1], Array[2], Array[3], Array[1] ] 

Выглядит хорошо для меня, я снял первые два элемента и массив теперь начинается с 2 пустых слота.

Итак, теперь я хочу добавить объекты к этим двум пустым слотам.

Для простоты, позволяет удалить его элементов из массива, а затем вставьте их снова в том же месте:

var twoFirstItems = Array.prototype.slice.call(array, 0,2); 
array = Array.prototype.splice.call(array, 0,2); 

Теперь, чтобы повторно вставить twoFirstItems я думаю, что я мог бы сделать:

array.unshift(twoFirstItems) 

Это не работает должным образом, оно вставляет массив, но у него нет key, как это было до его модификации. Я предполагаю, что это связано с unshift, не работающим с array-like object, как с array.

Итак, как вы удаляете/вставляете элементы в array-like-object правильно?

Если я сделать следующее:

console.log(array); 
    console.log(typeof array); 

Результат:

Array [ <1 empty slot>, Array[2], Array[2], Array[2], Array[3], Array[1] ] 
object 
+0

то, что вы имеете в виду массив, как, когда вы работаете с массивом? –

+0

Да, кажется, это обычный массив, но когда я это делаю: console.log (typeof array) это журнал 'объект'. – user2915962

+0

Почему бы не использовать индекс массива? –

ответ

1

Без каких-либо осложнений, вы можете просто re-assign модифицированного массива в этом индексе.

var a = [ 
 
    [1, 2, 3, 4, 5, 6], 
 
    [1, 2, 3, 4, 5, 6], 
 
    [1, 2, 3, 4, 5, 6], 
 
    [1, 2, 3, 4, 5, 6] 
 

 
] 
 

 
a[0] = a[0].map((el) => el * 10) 
 
a[1] = a[1].map((el) => el * 20) 
 

 
console.log(a)

Смежные вопросы