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

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

请问怎么封装比较好呢?

阅读 2.6k
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重了,不过也属于理所当然的答案

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