我有一个这样的对象数组:
var kvArray = [
{
number: '123',
duration: '00:00:00'
},
{
number: '324',
duration: '00:00:00'
}]
我想从上述数组中生成一个新数组,以使number
键成为索引。
这是我尝试过的
var kvArray = [
{
number: '123',
duration: '00:00:00'
},
{
number: '324',
duration: '00:00:00'
}]
var reformattedArray = kvArray.map(obj =>{
var rObj = {};
rObj[obj.number] = obj.duration;
return rObj;
});
console.log(reformattedArray)
相反,我希望输出数组像这样:
123: {"00:00:00"}
324: {"00:00:00"}
使得代替0,1作为索引,我将123和324作为索引。 这样,如果在我的代码中写入test_array [123],我应该能够在输出中获得00:00:00。是否有可能实现我在这里想要做的事情? 提出更好的方法
我该怎么做?
答案 0 :(得分:4)
您可以将array#map
与Object.assign()
结合使用以创建所需的输出。
const data = [ { number: '123', duration: '00:00:00' }, { number: '324', duration: '00:00:00' } ],
result = Object.assign(...data.map(({number, duration}) => ({[number]: duration})));
console.log(result);
答案 1 :(得分:2)
如果number
的值在数组中是唯一的,则可以使用.reduce()
创建一个如下所示的地图对象:
const data = [
{ number: '123', duration: '00:00:00' },
{ number: '324', duration: '00:00:00' }
];
const map = data.reduce((r, { number:k, duration:v }) => (r[k] = v, r), {});
console.log(map);
答案 2 :(得分:0)
reformattedArray =[]
tempHash = kvArray.reduce(function(i,j){
return $.extend(i,j)
})
for(i in tempHash) {
reformattedArray[i] = tempHash[i]
}