Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   array merge без замещения (https://javascript.ru/forum/misc/23195-array-merge-bez-zameshheniya.html)

bugmenot 15.11.2011 18:28

array merge без замещения
 
друзья, попробовал разные функции погуглить, но все сливают с пересечением.

есть массив arr и в нем еще один - items, в нем последовательно перечислены элементы вроде ['items'][0]['id'] = 1, ['items'][0]['stat'] = 1...

потом появляется еще один такой же arr, но с новыми данными. Их нужно не заменить, а добавить. Т.е. если в items 10 элементов, остальные прибавить после 9ого индекса, без замещения. Ведь в новом arr нумерация продет так же от 0 до 9. Т.е. нужно чтобы в слитом массиве получилось 20 элементов items.

Aetae 15.11.2011 18:32

Эээ concat?

bugmenot 15.11.2011 19:41

увы, получается в новом массиве [0]['items'] - от нового и следующий в этом уровне ['items'] - от старого массива. Т.е. на одном уровне [0] и ['items']. А нужно чтобы ['items'] слились

trikadin 15.11.2011 20:08

Оно?

arr1= [0, 1, 2, 3];
arr2= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
arr1.push.apply(arr1, arr2.slice(arr1.length));
alert(arr1);

Aetae 15.11.2011 20:16

Цитата:

Сообщение от trikadin (Сообщение 136758)
Оно?

Не оно, push.apply это тот же concat, только через попу.

trikadin 15.11.2011 20:21

Цитата:

Сообщение от Aetae
Не оно, push.apply это тот же concat, только через попу.

Да разница. Я о том, чтобы slice'ом отрезать кусок массива.

Aetae 15.11.2011 20:27

Я воспризвел примерно его структуру:
var arr=
[
  {
  'items':
    [
      {
        'id':1,
        'stat':1
      },
      {
        'id':10,
        'stat':12
      }
    ],
  'someshit': 'someshit'
  },
  'arrayelement'
];

alert(arr[0]['items'][0]['id'])
alert(arr[0]['items'][1]['stat'])

Имхо работать с этим - извращение, нативными функциями точно не отделаешься.

Aetae 15.11.2011 20:34

Разве что в цикле:
arr[i]['items'].concat(arr2[i]['items'])
Если я правильно понял задачу.


Часовой пояс GMT +3, время: 23:11.