如何映射数组并从中创建一个对象?

时间:2016-08-29 05:56:00

标签: javascript

以下是我的代码......

var temp = {};
[{group_id : "1111"}, {group_id: "2222"}].map(function(ele, index) {
    var group_id = ele.group_id;
    temp.group_id = {value: 0}
});

运行此代码后,临时对象为

 {group_id : {value : 0}

但我想要的是

{ {"1111" : {value : 0}}, {"2222" : {value : 0}} }

我该怎么做?

5 个答案:

答案 0 :(得分:1)

而不是使用temp.group_id使用temp[group_id]

答案 1 :(得分:0)

  

但我想要的是

{ {"1111" : {value : 0}}, {"2222" : {value : 0}} }

您可以利用数组存储结果为

的对象
[
  {
    "1111": {
      "value": 0
    }
  },
  {
    "2222": {
      "value": 0
    }
  }
]

var obj = [{group_id : "1111"}, {group_id: "2222"}];
var res = obj.map(o => ({[o.group_id]:{value:0}}));

答案 2 :(得分:0)

由于您当前指出的预期结果不是有效的JSON结构。

相反,我正在根据您的预期结果的假设来编写我的解决方案:
{ "1111" : {value : 0}, "2222" : {value : 0} }由于最终结果是一个对象,因此使用map将不合适,因为它返回一个数组。所以我的解决方案基于reduce API。



function initObject(obj, currElement) {
  obj[currElement.group_id] = { value: 0 };
  return obj;
}

console.log([{group_id : "1111"}, {group_id: "2222"}].reduce(initObject, {}));




答案 3 :(得分:0)

  

您可以使用reduce Fn将数组减少为对象。作为   期望您的输出不是有效的JSON,有效的结果   可以获得的JSON结构如下。请修改您的问题   对于有效的结果集,如果不是这种情况。



var temp = [{group_id : "1111"}, {group_id: "2222"}].reduce(function(obj, key) {
	
     obj[key.group_id] = {value: 0};
     return obj;
    
} , {});
console.log(temp);




答案 4 :(得分:0)

你的地图功能很好,虽然你想要实现的对象结构有点不对。

在一个对象中,值作为键值对存在,因此必须有一个针对temp对象的键。或者你可以将所有内容都包含在一个数组中。

SO



var temp = {};
[{group_id : "1111"}, {group_id: "2222"}]
.map(function(ele) {
    var group_id = ele.group_id;
    temp[group_id] = {value: 0}
});



  会给你temp作为

{"1111":{value: 0}, "2222":{value: 0}}

对于数组,您的代码可以如下所示:



var temp = [];
[{group_id : "1111"}, {group_id: "2222"}]
.map(function(ele) {
  var obj = {};
  obj[ele.group_id] = {value: 0}
  temp.push(obj)
});




这将为您提供temp

[{"1111":{value: 0}}, {"2222": {value: 0}}]

你可以使用其中任何一个,两者都很好,但取决于你以后在代码中使用temp的方式。