我想把下面数colOne和数组colTwo封装成数组cols的,代码如下:
var colOne = [
[
'account',
'accountName'
],
[
'wxHead',
'wxHeadImage'
],
[
'name',
'username',
'abc'
]
];
var colTwo = ['field', 'title','formatter'];
var cols = [
{
field: 'account',
title: 'accountName'
}, {
field: 'wxHead',
title: 'wxHeadImage'
}, {
field: 'name',
title: 'username',
formatter: 'abc'
}];
请问怎么封装比较好呢?
@leftstick 大神啊!,太牛逼了,把他的方案翻译了一下
var result = colOne.map(function(oneItem) {
return colTwo.reduce(function(res, twoItem, i) {
oneItem[i] && (res[twoItem] = oneItem[i]);
return res;
}, {});
})
试试我这招:
var result = colOne.map(col => colTwo.reduce((p, k, i) => (col[i] && (p[k] = col[i]), p), {}));
console.log(result);//[ { field: 'account', title: 'accountName' }, { field: 'wxHead', title: 'wxHeadImage' }, { field: 'name', title: 'username', formatter: 'abc' } ]
备注:
这招属于map和reduce的组合技
colOne.map( x => x.reduce( (p, v, i) => {p[colTwo[i]]=v; return p}, {}))
自己想的,写完发现和leftstick重了,不过也属于理所当然的答案