【问题标题】:How to create an array of objects from an existing array in javascript?如何从javascript中的现有数组创建对象数组?
【发布时间】:2016-06-18 19:11:50
【问题描述】:

我有一个数组,它的元素是字符串格式,像这样:

somearray = ["abc", "pqr", "xyz"]

我需要从这个数组中创建一个对象,我已将其变量声明为var newobject = {}。我试过这个:

var newobject = {};
var index = 0;
somearray.forEach(function() {
    newobj = {
        name : somearray[index]
    };
    index++;
});

这确实创建了一个对象,但仅包含数组中的最后一个字符串 (somearray)

如果不是

newobj = {
    name : somearray[index]
};

我写

newobj[index] = {
    name : somearray[index]
};

对象被命名为 0,1,2。我不希望这种情况发生,我也不希望其他任何东西代替它。 有没有像我们对数组使用 push 方法一样的方法?

【问题讨论】:

  • 您到底想达到什么目的?一个对象的每个值总是有一个键。
  • 你想要什么作为对象的键和值?
  • 请向我们展示预期结果的外观(如 JSON)
  • 预期输出为 [object, object, object] 其中每个对象为 {name: "abc/pqr/xyz"}
  • var result = somearray.map(function(str, i) { return {name: str} })

标签: javascript arrays object javascript-objects


【解决方案1】:

使用Array.forEachArray.push 函数的简单解决方案:

var somearray = ["abc", "pqr", "xyz"], objects = [];

somearray.forEach((v) => objects.push({name: v}) );    
console.log(JSON.stringify(objects, 0, 4));

或者同样使用Array.map函数:

var somearray = ["abc", "pqr", "xyz"], objects;  
objects = somearray.map((v) => ({name: v}) );

输出:

[
    {
        "name": "abc"
    },
    {
        "name": "pqr"
    },
    {
        "name": "xyz"
    }
]

【讨论】:

    【解决方案2】:

    只需使用键值表示法:

    var newobject = {};
    var somearray = ["abc", "pqr", "xyz"] ;
    somearray.forEach(function(x,i){
      newobject[i]=x;
    })
    console.log(newobject);

    【讨论】:

    • 为什么使用.map()?您只是丢弃了undefined 的结果数组。 .forEach().reduce() 更有意义。
    • @squint 你非常担心抛出的数组吗?我使用它是因为它更短...
    • 是的,它可以像 newObj = somearray.reduce((p,c,i) => (p[i] = c,p),{}); 那样完成
    • @nicael:你很担心还有 4 个字符吗?构建、填充和丢弃一个数组而不使用它是一件非常奇怪的事情。
    • @nicael 当然它会影响性能,你创建一个数组然后无缘无故地扔掉它。你不是免费得到的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2018-08-18
    • 1970-01-01
    • 2016-07-11
    • 2019-02-28
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多