【问题标题】:How to set array key as it's index in javascript/node js如何将数组键设置为 javascript/node js 中的索引
【发布时间】:2019-10-24 12:49:56
【问题描述】:

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

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 为索引的控制台中如下所示:

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

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

这样,而不是 0 , 1 作为索引我有 123 和 324 作为索引。 因此,如果在我的代码中写入 test_array[123],我应该能够在输出中获得 00:00:00。是否有可能实现我在这里尝试做的事情? 提出更好的方法来做到这一点

我该怎么做?

【问题讨论】:

  • 逻辑上大括号表示一个对象,没有键就不能创建对象。

标签: javascript arrays node.js sorting


【解决方案1】:

您可以使用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);

【讨论】:

  • (旁注):根据 OP 的输出,键应该是数字,因此应该将键转换为数字。
  • 键是对象中的字符串,如果键是数字,则应使用 Map。
  • Euuh 好吧,如你所愿,只是对我来说,这样的答案会更完整;)。
【解决方案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);

【讨论】:

    【解决方案3】:
    reformattedArray =[]
    tempHash = kvArray.reduce(function(i,j){
        return $.extend(i,j)
    })
    for(i in tempHash) {
        reformattedArray[i] = tempHash[i]
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多