求解一个js数组的问题

var cloumns = [

            ["家具类", "沙发", "温州市", 287589],

            ["家具类", "沙发", "光州市", 731786],

            ["家具类", "柜子", "杭州市", -4554],

            ["家具类", "柜子", "湖州市", -13556],

            ["家具类", "柜子", "嘉兴市", 6883],

            ["家具类", "床", "湖州市", 266137],

            ["家具类", "床", "嘉兴市", 113187],

            ["服装类", "童装", "广州市", 329072],

            ["服装类", "童装", "深圳市", 614692],

            ["服装类", "童装", "成都市", 229967],

            ["服装类", "童装", "嘉兴市", 66641],

            ["服装类", "女装", "成都市", 294351],

            ["服装类", "女装", "广州市", 52]

        ];

如上一个数组,如何转为这种形式:


var translateData = {

            nodes: [

                {

                    name: "家具类",

                    nodes: [

                        {

                            name: "沙发",

                            nodes: [

                                {

                                    name: "温州市",

                                    value: 287589

                                },

                                {

                                    name: "光州市",

                                    value: 731786

                                }

                            ]

                        },

                        {

                            name: "柜子",

                            nodes: [

                                {

                                    name: "杭州市",

                                    value: -4554

                                },

                                {

                                    name: "湖州市",

                                    value: -13556

                                }

                            ]

                        }

                    ]

                }, {


慕慕森
浏览 441回答 3
3回答

绝地无双

先把 数组第一个相同的提取出来组成一个数组。再分别遍历它们。数据结构就随你处置了

猛跑小猪

function trans (arr) {&nbsp; &nbsp; let result = {nodes: []}&nbsp; &nbsp; let depth = arr[0].length - 1&nbsp; &nbsp; if (!arr.length || depth < 1) return obj&nbsp; &nbsp; let cache = {&nbsp; &nbsp; &nbsp; &nbsp; '': result.nodes&nbsp; &nbsp; }&nbsp; &nbsp; ;[...new Array(depth).keys()].map(i => +i).forEach(i => {&nbsp; &nbsp; &nbsp; &nbsp; arr.forEach(cur => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let key = cur[i]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let allKey = cur.reduce((sum, cur, j) => sum += j < i ? cur : '', '')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i === depth - 1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return cache[allKey].push({name: key, value: cur[i + 1]})&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!cache[allKey + key]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let obj = {name: key, nodes: []}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cache[allKey].push(obj)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cache[allKey + key] = obj.nodes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; })&nbsp; &nbsp; return result}trans(cloumns)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript