javascript - Array重组
天蓬老师
天蓬老师 2017-04-11 11:29:26
[JavaScript讨论组]

第一种:

[
    {
        name: 'name1',
        cag: 'a'
    },
    {
        name: 'name2',
        cag: 'a'
    },
    {
        name: 'name3',
        cag: 'a'
    },
    {
        name: 'name4',
        cag: 'b'
    },
]

第二种:

[
    {
        slug: 'a',
        item: [
            {
                name: 'name1',
                cag: 'a'
            },
            {
                name: 'name2',
                cag: 'a'
            },
            {
                name: 'name3',
                cag: 'a'
            }
        ]
    },
    {
        slug: 'b',
        item: [
            {
                name: 'name4',
                cag: 'b'
            }
        ]
    }
]

JS如何将第一种重组成第二种格式?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
迷茫
function handle (arr) {
    var res = [], obj = {}, index = 0;
    arr.forEach(val => {
        if (obj.hasOwnProperty(val.cag)) {
            res[obj[val.cag]].item.push(val);    
        } else {
            obj[val.cag] = index++;
            res.push({
                slug: val.cag,
                item: [val]
            });
        }
    });
    return res;
}
黄舟
var data = [
    {
        name: 'name1',
        cag: 'a'
    },
    {
        name: 'name2',
        cag: 'a'
    },
    {
        name: 'name3',
        cag: 'a'
    },
    {
        name: 'name4',
        cag: 'b'
    },
];


var temp = null;
var obj = {};

for (var i = 0; i < data.length; i++) {
    temp = data[i];
    (obj[temp['cag']] = obj[temp['cag']] || []).push(temp);
}

var result = [];

for (k in obj) {
    if ({}.hasOwnProperty.call(obj, k)) {
        result.push({
            slag: k,
            items: obj[k]
        });
    }
}

console.log(result)
PHP中文网
var arr1 = arr.reduce(function(v, k) {
    var filters = v.filter(function(data) {
        return data.slag === k.cag
    });
    if (filters.length === 0) {
        v.push({
            slag: k.cag,
            item: [k]
        })
    } else {
        filters[0].item.push(k)
    };
    return v
}, [])
console.log(JSON.stringify(arr1));
//[{"slag":"a","item":[{"name":"name1","cag":"a"},{"name":"name2","cag":"a"},{"name":"name3","cag":"a"}]},{"slag":"b","item":[{"name":"name4","cag":"b"}]}]
伊谢尔伦

楼主要是没有特别的要求话我推荐一些比较好的扩展js工具类:underscroe 一些常用的工具方法都提供了。

巴扎黑

[{slug:'a',item:a.slice(0,3)},{slug:'b',item:a.slice(3,4)}]

a为第一种数组

迷茫
function convert(input) {
    return Array.from(input.reduce((p,v) => (p.get(v.cag) ? p.get(v.cag).push(v) : p.set(v.cag, [v]))&&p, new Map()),
                      a => {return {slug:a[0], item:a[1]}} );
}

一行搞定

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号