简体   繁体   English

使用lodash将JSON对象数组转换为哈希图

[英]convert array of JSON objects to hash map using lodash

I need to convert 我需要转换

var data = [
{ rel: 'links-A', href: 'url1', id: 0},
{ rel: 'links-A', href: 'url2', id: 1},
{ rel: 'links-B', href: 'url3', id: 2},
{ rel: 'links-B', href: 'url4', id: 3},
];

to a hash map like this: 到这样的哈希图:

var converted = {
linksA: [
        {href: 'url1', id: 0},
        {href: 'url2', id: 1}
                 ],
linksB: [
        {href: 'url3', id: 2},
        {href: 'url4', id: 3}
        ],
}

Not sure if it's doable with lodash 不确定用lodash是否可行

First groupBy rel and then map across the keys using mapKeys to remove the hyphen: 首先groupBy rel,然后使用mapKeys删除键在键之间进行映射

var converted = _(data)
    .groupBy('rel')
    .mapKeys( (v, k) => k.replace('-', ''))
    .value();

You don't even have to use lodash if you don't want to. 如果不想,甚至不需要使用lodash。 The .reduce array method should be sufficient: .reduce数组方法应足够:

 var data = [ { rel: 'links-A', href: 'url1', id: 0}, { rel: 'links-A', href: 'url2', id: 1}, { rel: 'links-B', href: 'url3', id: 2}, { rel: 'links-B', href: 'url4', id: 3}, ] var converted = data.reduce((final, current) => { var newKey = current.rel.replace("-", ""); if (!final[newKey]) final[newKey] = []; final[newKey].push({href: current.href, id: current.id}); return final; }, {}) console.log(converted) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM