【问题标题】:make one object out of several arrays用几个数组制作一个对象
【发布时间】:2014-03-23 06:13:05
【问题描述】:

我有几个数组,其中包含来自简单表单的存储信息

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]);

显然我不想每次都手动创建一个新对象,所以我猜想必须用 for 循环来做一些事情,但这如何为 object(i) 生成一个新名称?

我对 javascript 很陌生,可能我想太多了,答案就在眼前,但我真的可以在这里使用一些帮助。 谢谢一百万!

【问题讨论】:

  • 只需将生成的Person 对象存储在一个数组中;)。
  • 如果数组大小不同,那么人数会等于元素数最少的数组的长度吗?这可以假设吗?

标签: javascript arrays object


【解决方案1】:

这样的事情怎么样:

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

【讨论】:

  • objects = [] 代替 objects = new Array(len) 就足够了。
  • @kapa 正确,但我相信设置初始容量会更有效。
  • @pswg Depends on the browser,AFAIK。微优化是邪恶的;)。但我随时准备学习。
  • @kapa 我相信这也很大程度上取决于数组的大小。请参阅此comparison,其初始大小为 99999,仅少了一个。
  • @pswg 目前只有来自 Chrome 的数据 :)。但当然,数组的大小很重要。还有很多其他的事情。我还是说不要微优化。
【解决方案2】:

与 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】:

    使用Underscore.jszipmapobject)的一个班轮:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多