请问怎么封装下面的javascript代码比较好呢?

tv_哇
  • 10

我想把下面数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'
    }];

请问怎么封装比较好呢?

回复
阅读 1.4k
3 个回答
✓ 已被采纳

试试我这招:

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' } ]

备注:

这招属于mapreduce的组合技

@leftstick 大神啊!,太牛逼了,把他的方案翻译了一下

var result = colOne.map(function(oneItem) {
    return colTwo.reduce(function(res, twoItem, i) {
        oneItem[i] && (res[twoItem] = oneItem[i]);
        return res;
    }, {});
})

colOne.map( x => x.reduce( (p, v, i) => {p[colTwo[i]]=v; return p}, {}))

自己想的,写完发现和leftstick重了,不过也属于理所当然的答案

宣传栏