如何在javascript / node js中将数组键设置为索引

时间:2019-06-10 05:36:29

标签: javascript arrays node.js sorting

我有一个这样的对象数组:

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)

上面的输出在控制台中如下所示,以0和1作为索引: enter image description here

相反,我希望输出数组像这样:

123: {"00:00:00"}
324: {"00:00:00"}

使得代替0,1作为索引,我将123和324作为索引。 这样,如果在我的代码中写入test_array [123],我应该能够在输出中获得00:00:00。是否有可能实现我在这里想要做的事情? 提出更好的方法

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您可以将array#mapObject.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]
}