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类型的数据

-1

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);
-1
qq_39196400
K beasts 回复qq_40050220: JSON.parse 和 JSON.stringify 可以做对象拷贝
9 个月之前 回复
qq_39196400
K beasts 回复qq_40050220: 我用数组push方法,符合规律的组成一组,然后JSON的两个方法把弄,剩下就是拼接字符串
9 个月之前 回复
qq_40050220
江山流水 或者给推荐本书也好
9 个月之前 回复
qq_40050220
江山流水 求大佬给解释下原理 一直不明白怎么对未知层级的object 如何做运算处理 。
9 个月之前 回复
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);
1

这就是个递归算法

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));

1
 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);
0
qq_40050220
江山流水 回复zzgzzg00: 我好菜··· ······
9 个月之前 回复
zzgzzg00
似梦飞花 回复qq_40050220: 把const let改成var 函数参数里的xx={} 放到函数里就行了
9 个月之前 回复
qq_40050220
江山流水 有木有非ES6的写法呢?
9 个月之前 回复

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
将类数组转换成数组封装成方法
我们需要做到的是,兼容所有浏览器 n直接上代码var utils = (function(){n function toArray(array_like){//类数组n var ary=[];n try{n ary = Array.prototype.slice.call(array_like);//通过call方法将this指向array_l
已有常量数组n个,将它们封装成结构体
占座
把两个数组内容拼装到新对象里
前言,原先数据格式,主要是嵌套循环,for in 循环 对象、然后 后面 内容 循环两个数组。特此记录下nn{state:200,ndata:[n{getReconProductTradeInfos:[a:aa,b:bb,c:cc,name:xx]},n{getReconDistributions:[d:dd,e:ee,f:ff,name:xx]}n] ...
指定字符拼装成的字符串对象,转成java对象
因为业务需要,对象为字符串拼装,在网上找了很久都没有找到类似的工具类,所以就自己写了一个nnnnimport java.lang.reflect.Field;nn/**n * String 以指定字符装换成对象的工具类n */npublic class StringToObjiect {n //私有构造说明是工具类n private StringToObjiect() {}nn /**n * S...
poi根据导入的excel数据自动封装成bean对象集合
又是很久没写博客了,最近在弄一个批量导入的功能,按照古老的做法,当然是一行一行的解析然后根据字段所在的下标或者一列一列的解析依次赋值给bean对象。但是这种古老的方法弊端确实太多,于是想弄一个,根据表头中文名来自动匹配字段,然后根据行数自动创建bean对象的方式,实现标准数据的通用解析。rn在具体实现之前,首先得确定一个问题:你了解java的泛型吗?rn为什么我会提出这个问题,因为既然是做通用的,
利用结果集元数据将查询对象封装成map
@WebServlet("/ResultSetMetaDataTest")npublic class ResultSetMetaDataTest extends HttpServlet {n private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, H
[经典]自动将任何javabean封装成xml,返回Element对象
将javabean中的数据封装成xml,只需要将对象传入自定义工具类方法中,即可自动封装成Element对象.
表单数组封装成Json对象数组
...
关于前台js传对象数组到Controller中用list封装
js代码:rn var data000= "[{ 'name': 'Brett','age':'12' }, { 'name': 'Jason', 'age':'23' }, { 'name': 'Elliotte', 'age':'33'}]";//必须以这种格式n alert(data000);n $.ajax({n url:'traceabilityContr
利用java反射将结果集封装成为对象和对象集合
java反射机制 结果集封装为对象和对象集合
根据object封装实体对象
工作中用到了原生hibernate,得自己封装List&amp;lt;String,Map&amp;lt;Object,Objec&amp;gt;&amp;gt;,贴上代码。nnn nnn/**n * n * @Author:         Leon.Liun * @Version:        2018-8-13n * @Explain:        n *                     重新改写了一下代码.....
反射的应用 将form表单的数据自动封装为对象
我们经常做表单提交,然后把一大堆页面传过来的参数一一通过set方法赋值到对象中;rn还经常遇到一个表单提交同一个类的多个对象,rn甚至遇到:一个表单提交多种不同类的对象。rn rn学习完反射后,很希望做一个比较通用的工具类,不再每次为上面的事情做重复劳动。rn rn例如:页面有以下输入框:rn&amp;lt;input type=&quot;text&quot; name=&quot;name&quot;  value=&quot;Jack&quot;/&amp;gt;r...
javascript基础--对象(Object)封装
引言n 说到对象,我想到一个成语叫作谈虎色变,对象应该说是javascript中最难得一部分,原因呢,首先,js作为函数式编程语言,对象的实现方式跟java,c,c++等面向对象设计语言不一样;其次js面向对象编程属于高级程序员应该掌握的,对于初学者来讲,没有实践基础,凭空理解更是难上加难。不过不用担心,我也不怎么会,我们就一起来探讨一下吧。n1.对象封装n 我们举个例子,大千世界,人心难测。每
java 将数据库字段名、所属表、字段类型封装成对象
前言nnn 之前写过一个JDBC工具类,里面有获取所有表名、字段、字段类型等(还在不断更新功能中…),之前项目有个需求,前端人员将一个关联表id给我,我查出有存储多少个表名,在把这些表的字段和类型都集合在一起返回给他,每个字段、字段类型都有边上跟着一张表,那好,我就封装了一个对象返回,接下来实践一下。nnnnn返回对象nnnn/**n * @Author: ChenBinn * @Date: 2...
Form表单中的属性封装到对象中
将Form表单中的属性封装到对象中,使用beanutils工具类获得在java项目中常常会涉及到form表单提交到后台,而提交到后台的方式有get和post两种。大多数公司都会采用post方式更安全。经常会涉及到这么一种情况,form表单的属性都可以使用一个bean来接收,在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中读取到的数据都是String,
前台参数封装为对象数组及后台参数解析
当传入后台参数太多并且这些参数属于某个类时,可以把这些参数封装成对象,形成对象数组,这样,可以使对象自身的参数一一对应,并把封装好的对象数组,赋给一个参数,通过这一个参数,把对象所有的值传入后台,再通过解析,把这个参数解析成对象数组(此时值已经对应好了),后台写方法时需要什么参数直接get就行了。nnn如何在前台(以js页面为例)把众多参数对应的封装成对象数组:nnn// 提交nsaveRoleA...
jquery包装对象及jq对象和DOM对象之间的转换
定义jq对象时一般在变量前面加$符号以区别dom对象。通过jq选择器获得的对象都是jq对象,获得的对象是一个伪数组集合。id="tab">n class="mid">n class="zoom">n n n class="mir">nn n比如:var $tab=$("#tab"),$tab是一个jq对象的伪数组集合。对象之间的转化:转换成DOM对象,va
将form表单封装成对象
通常,在提交字段较少的form中,我们可以在控制层直接用多字段参数去接收。但在字段较多,比如一个from表单中包含十几个甚至二十几个字段时,控制层再用单个字段来一个一个接收的话,参数就会非常多,并且代码可读性也大大降低。因此将字段封装成对象,再将对象传回控制层,就大大简化了代码。具体方法如下:rnrnrnHMTL:n n 系统编码: n n n n 系统名称: n n n n 系统类型:
运用hql语句查询实体类指定字段自动封装成实体bean
在实体类中添加指定字段的构造方法public class User {nn public User(String id, String name) {n super();n this.id= id;n this.name= name;n }nn}在DAO层用hql语句查询String hql = &quot;Select new User(id, name) from User where name ...
jQuery封装解析数据(数组,json对象)
1.解析数组nn定义变量nvar msgTypeData = [n {'key': 1, 'val': '企业'},n {'key': 2, 'val': '数据'},n {'key': 3, 'val': '意见'}n ];方法调用ndy
将页面的对象(一个对象+一个list)封装成josn对象传入控制层
关于推荐人奖励多条件的需求 将他们先封装成数组,然后把他们在放到一个总数组里 将这个数组传到控制层,这里传了一个对象和一个list集合 相当于2张表的数据 一个是主表 一条数据 另一个是从表 多条数据。
javascript中把数据封装成json数据格式
javascript中把数据封装成json数据格式nn直接po代码和截图nnn&amp;lt;!DOCTYPE html&amp;gt;n&amp;lt;html&amp;gt;n&amp;lt;head&amp;gt;n&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&amp;gt;n&amp;lt;title&amp;gt;这里填写标题&amp;lt;/title
匹配数组(A和B数组之间的对应关系)
数组之间的数据分析
把一个个对象封装成json数据
1、定义一个对象var value={&quot;value&quot;:'',&quot;label&quot;:''};2、定义一个数组var arr=[];3、使用for循环进行赋值for(var i=0;i&amp;lt;4;i++){   var value={&quot;value&quot;:'',&quot;label&quot;:''};   value[&quot;value&quot;]=i;   value[&quot;label&quot;]=i;   arr.push(value
前台常用封装(一)
开发web项目时,经常会使用到的页面脚本语言javascript,使用它能让页面展示上的效果更多彩。rnrn今天就来说一下,从数据库中获取到数据后在页面上的展示方式:rnrn1.数据库取出数据放入list,将其使用jsonobject封装成json串:rn  select id="selectAll" resultMap="BaseResultMap"n parameterType=
spring框架中对象属性值从前端到后端自动封装
该对象的类需要提供无参的构造方法
前端 对象属相封装到实体类中,传到后台
        在开发中往往会将我们的一些用到对象的属性需要传到后台,而且对象还是多个,为了提高开发效率,故写一个公共的方法来将多个前台对象的属性传到后台。比如我这里有对象var p={&quot;a&quot;:&quot;aaa&quot;,&quot;b&quot;:&quot;bbb&quot;,&quot;c&quot;:&quot;ccc&quot;,&quot;array&quot;:ary},可能还有数组对象 var ary = [{&quot;属性a&quot;:&quot;123&quo
Java之JDBC查询结果集封装到对象
有任何问题加群讨论,还可以领取精美学习资料噢~nn群号:733899823nn加群时请备注CSDN~nn工程目录结构如下:nnnnUser类:nnnpackage com.xiao.pojo;nn/**n * @author 笑笑n * @Date 2018年3月15日上午9:20:28n * n */npublic class User {n n private int uid = 0;n ...
jquery将form表单数据封装成js对象
rn// 将一个表单的数据返回成JS对象rn$.fn.serializeObject = function() {rn var o = {};rn var a = this.serializeArray();rn $.each(a, function() {rn if (o[this.name]) {rn if (!o[this.name].push) {rn o[this.name]...
利用java反射将map值封装到对象中
有时候我们需要将map里面的值依据键依次封装到对象里面。 n这时需要简单的用下反射。 n例子如下:public void newLoadFromMap(Map<?,?> map) throws IllegalArgumentException, IllegalAccessException{n try {n Field[] fields = this.getClass()
将一维数组的反转,封装成方法
不重新定义数组,利用两个变量start、end作为首、尾元素。nnpublic static void main(String[] args) {n int[] arr = { 11, 22, 33, 44, 55, 66 };n swap(arr);n printArray(arr);n}nnstatic void swap(int[] arr) {n //for循环里面...
JS中数组去重的最佳方法
第一种:把去重的函数写到内置类原型上。nnnnArray.prototype.myUnique = function myUnique(){n var obj = {};n for (var i=0;i&amp;lt;this.length;i++){n var item = this[i];n if(typeof obj[item] !== &quot;undefined&quot;...
struts2获取参数/封装对象
struts2的简单使用,获取域中对象和值,获取页面传递的值
ios开发绘制柱状图,胼状图,拆线图,雷达图
ios开发绘制柱状图,胼状图,拆线图,雷达图。本项目是将百度的ECharts工具封装成对应的iOS的控件,并且将其中javascript的属性封装成对应的对象。方便程序员在编写程序的过 程中更加关注OC的代码,避免在使用百度的ECharts工具的过程中过多的关注javascript语法和与javascript之间的交互。
javaweb实现自动将前端的属性值(HttpServletRequest)转化为后台对应的实体类
通常我们在后台需要获取前端的属性值的时候用到的是request.getParameter("xxx");n下面的方法将实现自动将HttpServletRequest中的值封装到实体类中,需要一定的Java反射技术。nn要求:前端form表单中的input标签中name的值是实体类中的属性。这样才能被识别到。nn例如:n在JSP中使用如下input:nage" value=""/>在P
php对象和js对象的对应关系
一.js对象nndata:[           {value:335, name:'直接访问'},n            {value:310, name:'邮件营销'},n            {value:274, name:'联盟广告'},n            {value:235, name:'视频广告'},n            {value:400, name:'搜索引擎'...
13、Mybatis把返回结果封装成map类型
一、Mybatis把返回结果封装成map类型,表的字段名对应map中的key,字段所属的值对应map中的valuenn例如接口为:nnnnpublic interface UserDao {n public Map getMapUser(int id);n}nn接口在mybatis中的实现为:nnnnnmapper namespace="com.lzj.mybatis.dao.UserDao
将一个Map中的数据封装到javaBean中
将一个Map中的数据封装到javaBean中
MyBatis查询结果封装成List
<select id="associationCountByMap" resultType="java.lang.String">n select sayings_id from user_sayings_group_relation o left join user_sayings pn on o.sayings_id = p.idn where 1=1
list集合转对应类型的对象数组
package com.mbit.test1;nnimport java.util.ArrayList;nimport java.util.Arrays;nimport java.util.List;nnpublic class TestReturnArray {n n public static void main(String[] args) {n n ArrayList list = (
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 qt5对应python教程 物联网工程师所对应的课程

相似问题

5
JavaScript 怎么给一些有对应关系的数组封装成对应的对象?
1
javascript的一点困惑
9
前端短信验证码60秒只能点击一次怎么实现?
5
java前台js怎么从第一个页面获取值传到第二个页面,并不刷新第二个页面
1
学习Javascript的困扰,小白以前没接触过,希望能分享一些经验
4
vue技术问题。后台返回一个数组,根据数组的顺序,动态显示子组件的先后顺序,请问怎么解决?
2
js实现点击图片切换图片时怎么同时也切换背景音乐?
1
交叉表的前后端怎么设计?
2
js怎么根据自定义属性的值来查找元素
1
ajax 传递数据 给 python本地服务端
3
javascript原型链继承,为什么会出现这种情况,求大神解答?
5
ajax从后台获取到null怎么能让他进行判断
2
var a = a || b,改用let,怎么写啊?
0
javascript怎么实现读取windows xp的电脑cdkey的功能?
3
js怎么抓取文本框里的数据,抓取出来的数据该怎么使用, 可以再标签之外使用吗?
4
关于java与javaScript加载顺序的问题和及一些概念的疑问
0
js push()后 数组顺序发生改变,但数组console第0位和整体console的第0位不同
0
javascript对多个数组判断以后得到其中所有的尾标元素并且仅仅提交?
2
求各位大神!想用JavaScript实行一个幻灯片效果,我放在里面的图片一张都没有显示,
0
javascript+unifia.js+ome怎么实现国标3码的过滤?