如何将键值元组数组转换为对象

新手上路,请多包涵

我有一个数组:

 [ [ 'cardType', 'iDEBIT' ],
  [ 'txnAmount', '17.64' ],
  [ 'txnId', '20181' ],
  [ 'txnType', 'Purchase' ],
  [ 'txnDate', '2015/08/13 21:50:04' ],
  [ 'respCode', '0' ],
  [ 'isoCode', '0' ],
  [ 'authCode', '' ],
  [ 'acquirerInvoice', '0' ],
  [ 'message', '' ],
  [ 'isComplete', 'true' ],
  [ 'isTimeout', 'false' ] ]

但是我无法通过数组的键访问数据,例如 arr['txnId'] 不返回 20181 。如何将上面的元组数组转换为对象,以便我可以轻松地通过键访问数据。

原文由 Anthony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 308
2 个回答

2020 年 6 月更新

ECMAScript 2021 带来了 Object.fromEntries 完全符合要求:

 const array =    [ [ 'cardType', 'iDEBIT' ],
      [ 'txnAmount', '17.64' ],
      [ 'txnId', '20181' ],
      [ 'txnType', 'Purchase' ],
      [ 'txnDate', '2015/08/13 21:50:04' ],
      [ 'respCode', '0' ],
      [ 'isoCode', '0' ],
      [ 'authCode', '' ],
      [ 'acquirerInvoice', '0' ],
      [ 'message', '' ],
      [ 'isComplete', 'true' ],
      [ 'isTimeout', 'false' ] ];

const obj = Object.fromEntries(array);
console.log(obj);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries

这将做到:

 const array =    [ [ 'cardType', 'iDEBIT' ],
      [ 'txnAmount', '17.64' ],
      [ 'txnId', '20181' ],
      [ 'txnType', 'Purchase' ],
      [ 'txnDate', '2015/08/13 21:50:04' ],
      [ 'respCode', '0' ],
      [ 'isoCode', '0' ],
      [ 'authCode', '' ],
      [ 'acquirerInvoice', '0' ],
      [ 'message', '' ],
      [ 'isComplete', 'true' ],
      [ 'isTimeout', 'false' ] ];

var obj = {};
array.forEach(function(data){
    obj[data[0]] = data[1]
});
console.log(obj);

原文由 baao 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如 baao 指出 的那样,自 2019 年以来,您可以使用 Object.fromEntries(arr) ( docs ) 在所有现代浏览器上执行此操作:

 var arr = [['cardType', 'iDEBIT'],
  ['txnAmount', '17.64'],
  ['txnId', '20181']];

console.log(Object.fromEntries(arr));

如果那不可用,我以前的解决方案是映射到键值对象数组,并通过 传播Object.assign 来组合对象:

 Object.assign(...arr.map(([key, val]) => ({[key]: val})))

原文由 Toph 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏