2014-02-21 3 views
1

У меня есть несколько массивов с сохраненной информацией из простой формысделать один объект из нескольких массивов

var name = [a, b, c, ...]; var last = [x, y, z, ...]; var age = [1, 2, 3];

Теперь это идея, что, когда кто-то новые заливки в форме, и, таким образом, новый элемент добавлено к массивам, новый объект создан, который держит это лица информации как:

function Person(name,last,age){ 
this.name=name; 
this.last=last; 
this.age=age; 
} 

var object1 = new Person(name[1],last[1],age[1]); 

Очевидно, что я не хочу, чтобы вручную создать новый объект каждый раз, так что я думаю, что-то должно быть сделано с для цикла, но как это генерирует новое имя для объекта (i)?

Я совершенно новичок в javascript, и, возможно, я переусердствую, и это ответ, который смотрит мне прямо в лицо, Но я действительно мог бы здесь помочь. Спасибо, миллион!

+0

Просто хранить полученные 'объекты Person' в массиве;). – kapa

+0

Если массивы не имеют одинакового размера, количество людей будет равно длине массива с наименьшим количеством элементов? Можно ли это предположить? –

ответ

0

Немного отличается от версии p.s.w.g, которая хороша в любом случае, при условии, что каждое поле всегда заполнены (каждый массив имеет тот же размер).

var persons = []; 

for (var i = 0; i < names.length; i++) 
    persons.push(new Person(names[i], lasts[i], ages[i])); 
3

Как о чем-то вроде этого:

var len = Math.min(name.length, last.length, age.length), 
    objects = new Array(len); 
for (var i = 0; i < len; i++) 
    objects[i] = new Person(name[i], last[i], age[i]); 

Demonstration

+0

'objects = []' будет достаточно, а не 'objects = new Array (len)'. – kapa

+0

@kapa правильно, но я считаю, что установка начальной емкости немного более эффективна. –

+0

@pswg [зависит от браузера] (http://jsperf.com/big-array-initialize/2), AFAIK. И микрооптимизация - это зло;). Но я всегда готов учиться. – kapa

0

Один вкладыш с использованием Underscore.js (zip, map и object):

var people = _.map(_.zip(names, lasts, ages), function(p) { return _.object(['name','last','age'], p); }); 
+0

** Примечание **: если вы новичок в JS, но не для программирования в целом, я бы очень посоветовал использовать Underscore. Кроме того, если у вас нет Underscore или вы хотите увидеть реализацию '_.object()', посмотрите http://stackoverflow.com/a/14399998/2882550 –

+0

** Также **: это может представлять интерес: http://stackoverflow.com/questions/1117916/merge-keys-array-and-values-array-into-an-object-in-javascript –

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