2013-11-19 2 views
1

У меня есть массив (oldArray) из 120 объектов. Я хочу создать еще один массив (newArray), первым элементом которого является первый элемент oldArray. Кажется довольно простым, за исключением того, что мои выходы не так ожидаются.JavaScript массив объектов не толкает должным образом

var obj = oldArray[0]; 
newArray[0] = obj; 
console.log(obj); 
console.log(newArray); 
console.log(newArray[0]); 
console.log(oldArray); 
console.log(oldArray[0]); 

obj, newArray[0] и oldArray[0] все тот же результат в моей консоли - единственный объект, который я хочу работать.

newArray однако показывает все объекты oldArray, а не только тот, который я думал, содержал. newArray.length == 1. Консольные дисплеи: [Объект]

oldArray - мой оригинальный массив. oldArray.length == 120. Консольные дисплеи [Объект, Объект, ...]

Я пробовал много вещей и не ожидал, что это повредит. Я думал, что это было бы newArray.push(oldArray[0]) или, может быть, newArray[0] = oldArray.splice(0,1), но все, что я пытаюсь, похоже, создает ту же проблему.

Есть ли какой-то специальный трюк для работы с массивами объектов?

Спасибо!

+1

выглядит так: http://jsfiddle.net/arunpjohny/YK5aW/1/ –

+1

Являются ли 'newArray' и' oldArray' объявленными как Array? – jfriend00

+0

Хорошо, выяснилось, что некоторые вещи, которые я делал с newArray позже, испортили его, но по какой-то причине консоль.log показывала LATER-версию newArray (у меня не было других консольных.logs где-нибудь еще). Вещь отлично работает. Спасибо всем. –

ответ

2

Я попытался тиражирование проблемы и это мои результаты:

var oldArray = ['a','b','c','d']; 
var newArray = []; 

var obj = oldArray[0]; // store the first value in a new variable 
newArray[0] = obj; // push the variable's value to the first index of the new array 

console.log(obj); 
    // 'a' 
console.log(newArray); 
    // ['a'] 
console.log(newArray[0]); 
    // 'a' (the same as obj) 
console.log(oldArray); 
    // ["a", "b", "c", "d"] 
console.log(oldArray[0]); 
    // 'a' 

на основе объема сценария и данных в oldArray, это является правильным поведением. Либо ваш тестовый пример не будет правильно восстановлен, либо проблема не будет отражена в вашем вопросе.

Поскольку я тестировал строки, а не объекты, может быть какое-то другое поведение в вашем конкретном случае использования, но предоставление некоторых образцов данных о содержимом oldArray в значительной степени поможет вашему делу.

+0

Я уверен, что с моим кодом происходит что-то еще. Оба являются массивами, но когда я тестирую typeof, я получаю «объект». Это нормально? –

+1

В JS оба объекта и массивы имеют тип '' object "'. Разницу между ними можно оценить, выполнив 'item.length'. Объекты имеют длину 'undefined', а массивы будут' 0' или больше. – Bryce

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