使用数组javascript中的多个对象的值构建映射

时间:2017-05-23 22:03:26

标签: javascript arrays ecmascript-6 maps

我需要建立一张地图" A"来自现有的对象数组。但是,映射A上的键值对来自现有对象键的值" id"和" cap"。

是否可以读取2个键的值并存储为对象

  var items =  [{
                "id": 1,
                "name": "Primary",
                "cap": [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }]
                },{
                "id": 2,
                "name": "Secondary",
                "cap": [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }
                ]
            }]

我的地图需要像这样

          { "1" : [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }],
              "2" : [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }]
 }

3 个答案:

答案 0 :(得分:2)

使用Array#reduce获得如下结果:



var items = [{
  "id": 1,
  "name": "Primary",
  "cap": [{
    "id": "1",
    "name": "1s"
  }, {
    "id": "2",
    "name": "T2s"
  }]
}, {
  "id": 2,
  "name": "Secondary",
  "cap": [{
    "id": "1",
    "name": "1s"
  }, {
    "id": "2",
    "name": "T2s"
  }]
}];

var ans = items.reduce(function(v, i) {
  v[i.id] = i.cap;
  return v;
}, {});

console.log(ans);




答案 1 :(得分:1)

你可以在原始数组上使用一个简单的循环,并在对象中定义一个新的key:value对。

// Create the map
var map = {}
// For every 'item' within the 'items' array
items.forEach(item => {
    // Map the item ID to the item.cap array
    map[item.id] = item.cap
}



var items = [{
  "id": 1,
  "name": "Primary",
  "cap": [{
    "id": "1",
    "name": "1s"
  }, {
    "id": "2",
    "name": "T2s"
  }]
}, {
  "id": 2,
  "name": "Secondary",
  "cap": [{
    "id": "1",
    "name": "1s"
  }, {
    "id": "2",
    "name": "T2s"
  }]
}]

var map = {}
items.forEach(item => {
  map[item.id] = item.cap
})

console.log(map)




答案 2 :(得分:0)

使用ES6 Array.from()方法。



 var items =  [{
                "id": 1,
                "name": "Primary",
                "cap": [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }]
                },{
                "id": 2,
                "name": "Secondary",
                "cap": [{
                        "id": "1",
                        "name": "1s"
                    }, {
                        "id": "2",
                        "name": "T2s"
                    }
                ]
            }];

var obj = {};
var res = Array.from(items, x => obj[x.id] = x.cap);

console.log(obj);