JavaScript 怎么给一些有对应关系的数组封装成对应的对象?

已知一个无序数组,有一个初始id

根据这个初始ID 从数组中排出

//处理后的结果
 {tid:8836,child:[{tid:936,child:[...],tid:939...}]}                

//原始请求回来的数据
var begin_id = 8836;
var sub_list = [{
tid:8836,
sub:[936,939,972]
},{
tid:936,
sub:[872,811]
},{
tid:939,
sub:[762,755,703]
},{
tid:972,
sub:[644,691,672]
},{
tid:872,
sub:[544]
},{
tid:811,
sub:[435,435,435,435,435]
}]

求大佬们救命啊,我们后端不给处理,让我们自己处理

一些对应关系的数组 整理成map类型的数据

5个回答

昨晚答案,怎么不见了。修正了代码

运行结果:

{tid:8836,child:[{"tid":936,"child":[872,811]},{"tid":939,"child":[762,755,703]},{"tid":972,"child":[644,691,672]},{"tid":872,"child":[544]},{"tid":811,"child":[435,435,435,435,435]}]}

代码:

var begin_id = 8836;
var sub_list = [{
tid:8836,
sub:[936,939,972]
},{
tid:936,
sub:[872,811]
},{
tid:939,
sub:[762,755,703]
},{
tid:972,
sub:[644,691,672]
},{
tid:872,
sub:[544]
},{
tid:811,
sub:[435,435,435,435,435]
}];

for(key in sub_list){
    if(sub_list[key].tid == begin_id){
        var param = [];
        var k = key;
        for(key2 in sub_list){
            if (key != key2){
                param.push({"tid":sub_list[key2].tid,"child":sub_list[key2].sub})
            }
        }

    }
}


var json = JSON.stringify(param);
    json = '{tid:'+sub_list[k].tid +",child:" + json + "}";
    json = JSON.parse(JSON.stringify(json));
console.log(json);
qq_39196400
K beasts 回复qq_40050220: JSON.parse 和 JSON.stringify 可以做对象拷贝
11 个月之前 回复
qq_39196400
K beasts 回复qq_40050220: 我用数组push方法,符合规律的组成一组,然后JSON的两个方法把弄,剩下就是拼接字符串
11 个月之前 回复
qq_40050220
江山流水 或者给推荐本书也好
11 个月之前 回复
qq_40050220
江山流水 求大佬给解释下原理 一直不明白怎么对未知层级的object 如何做运算处理 。
11 个月之前 回复
var begin_id = 8836;
var sub_list = [{
    tid: 8836,
    sub: [936, 939, 972]
}, {
    tid: 936,
    sub: [872, 811]
}, {
    tid: 939,
    sub: [762, 755, 703]
}, {
    tid: 972,
    sub: [644, 691, 672]
}, {
    tid: 872,
    sub: [544]
}, {
    tid: 811,
    sub: [435, 435, 435, 435, 435]
}];
function myFind(id) {
    for (var i = 0, len = sub_list.length; i < len; i++) {
        if (sub_list[i].tid == id) {
            return sub_list[i];
        }
    }
    return -1;
}

function createObj(begin_id) {
    var tempObj = {};
    var temp = myFind(begin_id);
    if (temp != -1) {
        tempObj.tid = temp.tid;
        tempObj.child = [];
        if (temp.sub && temp.sub.length > 0) {
            for (var i = 0, len = temp.sub.length; i < len; i++) {
                tempObj.child.push(createObj(temp.sub[i]));
            }
        }
    }
    return tempObj;
}
 createObj(begin_id);

这就是个递归算法

var begin_id = 8836;
var sub_list = [{
    tid: 8836,
    sub: [936, 939, 972]
}, {
    tid: 936,
    sub: [872, 811]
}, {
    tid: 939,
    sub: [762, 755, 703]
}, {
    tid: 972,
    sub: [644, 691, 672]
}, {
    tid: 872,
    sub: [544]
}, {
    tid: 811,
    sub: [435, 435, 435, 435, 435]
}]

function convert(id) {
    var so = sub_list.filter(function(v){
        return id == v.tid;
    })[0];
    return so ? {
        tid: so.tid,
        child: so.sub.map(function(v){
                return convert(v);
            })
        } : id;
}
var obj = convert(begin_id);
console.log(JSON.stringify(obj,null,4));

 var begin_id = 8836;
    var sub_list = [{
        tid:8836,
        sub:[936,939,972]
    },{
        tid:936,
        sub:[872,811]
    },{
        tid:939,
        sub:[762,755,703]
    },{
        tid:972,
        sub:[644,691,672]
    },{
        tid:872,
        sub:[544]
    },{
        tid:811,
        sub:[435,435,435,435,435]
    }]
    function createFindByIdArray(arr){
        return function findById(id) {
            return arr.filter(item=>item.tid===id);
        }
    }
    const subArrFind=createFindByIdArray(sub_list);
    function createTreeObject(id,obj={}){
        const arr=subArrFind(id);
        if(arr.length){
            const item=arr[0];
            obj['tid']=item.tid;
            if(item.sub.length){
                obj.child=[];
                for(let i of item.sub){
                    obj.child.push(createTreeObject(i));
                }
            }
        }else{
            obj['tid']=id;
        }
        return obj;
    }
    const result=createTreeObject(begin_id);
    console.log(result);
qq_40050220
江山流水 回复zzgzzg00: 我好菜··· ······
11 个月之前 回复
zzgzzg00
似梦飞花 回复qq_40050220: 把const let改成var 函数参数里的xx={} 放到函数里就行了
11 个月之前 回复
qq_40050220
江山流水 有木有非ES6的写法呢?
11 个月之前 回复

楼主,这是后端返回给你的数据吗,如果是,js会自动转成对象的呀,你直接遍历就行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

2
javascript 数组找不同问题
1
js中怎么拿到canvas的二进制数组
8
js中怎么拿到canvas里面的二进制数组
3
javascript如何区分变量为对象或数组
6
基于h5+css3+js,以及服务端语言php做的webapp都可以封装成app么?
8
怎么在javascript里使用数组呢,var[] arr这样定义不行?
4
js如何将压缩过的字节数组转换为图片展示在前台
1
javascript读取2个json数组,并且合并成一个数组,再排序
3
javascript怎么把一个json的数组拆分到两个json里,而且都要排序
4
javascript如何用数组实现冒泡排序的算法,不用sort函数怎么实现?
4
javascript怎么将带有科学计数法的大数转换成普通数?在线急等,马上给分采纳
6
javascript中怎么实现求一个数组的中位数,求中位数的方式怎么实现的呢?
2
请问如何使用javascript的map语句实现不定多个数组的相加?相加怎么用map实现?
8
javascript开发读取一个excel文件,并且提取里面的表格到数组,用javascpt怎么写?
8
javascript求数组中的最大数,返回的是数组的下标,不是值,百度了一天没找到,怎么做
5
js,如何按照下标号去分割一个不等长的数组,下有详细
4
SrpingMVC如何接收JS二维数组参数
1
javascript多维数据数组的转换是怎么进行循环和判断的,怎么直接判断转换以后的字符串?
3
javascript语言怎么能够对后台的数组型(非字符串)实现split一样的功能?
4
vue技术问题。后台返回一个数组,根据数组的顺序,动态显示子组件的先后顺序,请问怎么解决?