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

81

我有一个数组:

[ [ '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。我该如何将上述元组数组转换为对象,以便我可以轻松地通过键访问数据。


我们之前讨论过如何将数组转换为对象,你可以参考此内容并根据你的需求得出最佳解决方案。 https://dev59.com/l2855IYBdhLWcg3wp2N0 - ANR Upgraded Version
3
数组也是对象。;-) - RobG
14个回答

1
你可以使用ES6中的数组reduce轻松完成此操作。
在此示例中,我们创建了一个reducer函数,并将一个空对象'{}'作为初始值与reducer一起传递给reduce函数。

const arr =    [ [ '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 reducer = (obj, item) => {
  obj[item[0]] = item[1];
  return obj;
};

const result = arr.reduce(reducer, {});

console.log(result);


1
最简单的方法是将数组设置为您的JSON数据:
var obj = {};
array.forEach(function(Data){
obj[Data[0]] = Data[1]
})

1
我强烈建议您使用ES6和它完美的Object.assign()方法。
Object.assign({}, ...array.map(([ key, value ]) => ({ [key]: value })));

这里发生了什么 - Object.assign() 只是从捐赠对象中获取键值对并将其放入结果中。在这种情况下,我使用 ... 将新的 array 拆分成多个键值对(在 map 之后看起来像 [{'cardType':'iDEBIT'}, ... ])。因此,最终,新的 {} 接收来自映射的 array 中每个键值对的每个键和属性。

0
let obj ={'abc':123,'other':566};

// first way
let coll= Object.entries(obj).map(i=>Object.assign({'key':i[0],'value':i[1]}))

results: coll => 
0: {key: "abc", value: 123}
1: {key: "other", value: 566}

// second way
let coll2= new Map(Object.entries(obj))
results: coll2 =? 
//[[Entries]]
0: {"abc" => 123}
1: {"other" => 566}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接