Ant*_*ony 45 javascript arrays
我有一个数组:
[ [ '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' ] ]
Run Code Online (Sandbox Code Playgroud)
但我不能通过数组的密钥访问数据,例如arr['txnId']不返回20181.如何将上面的元组数组转换为对象,以便我可以通过键轻松访问数据.
Top*_*oph 78
如果您正在使用ES6,则可以使用Object.assign和spread运算符来使用map而不是@ royhowie的reduce,这可能会也可能不会更直观:
Object.assign(...arr.map(([key, val]) => ({[key]: val})))
Run Code Online (Sandbox Code Playgroud)
例如:
var 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' ] ]
var obj = Object.assign(...arr.map(([key, val]) => ({[key]: val})))
console.log(obj)Run Code Online (Sandbox Code Playgroud)
roy*_*wie 40
更惯用的方法是使用Array.prototype.reduce:
var 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' ]
];
var obj = arr.reduce(function (o, currentArray) {
var key = currentArray[0], value = currentArray[1]
o[key] = value
return o
}, {})
console.log(obj)
document.write(JSON.stringify(obj).split(',').join(',<br>'))Run Code Online (Sandbox Code Playgroud)
使用ES6(rest parameters)语法完成后,这在视觉上更具吸引力:
let obj = arr.reduce((o, [ key, value ]) => {
o[key] = value
return o
}, {})
Run Code Online (Sandbox Code Playgroud)
chr*_*con 26
这样做:
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);Run Code Online (Sandbox Code Playgroud)
Ric*_*omi 26
使用地图.
new Map(array);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为变量的类型array是Array<[key,value]>.该Map构造可以与阵列的阵列,其中所述内阵列的第一个元素是密钥和第二是值被初始化.
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 = new Map(array);
console.log(obj.get('txnDate'));Run Code Online (Sandbox Code Playgroud)
Osw*_*ldo 13
arr.reduce((o, [key, value]) => ({...o, [key]: value}), {})
Run Code Online (Sandbox Code Playgroud)
使用Object.fromEntries,您可以从 转换Array为Object:
var entries = [
['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 = Object.fromEntries(entries);
console.log(obj);Run Code Online (Sandbox Code Playgroud)