将两个有相连关系的数据表进行归类

// 归类函数  
    // 配置项: 所依据的归类数据 fields, 被归类的目标数据datas, 归类的字段mapping_field, 归类类型sortType ("single"/"multi")
    // sortType的可选属性"single"指单一归类,"multi"指的是复合归类
    function sortDatas(fields, datas){
    	var cache = {};

    	return function(mapping_field, sortType){
    		if(sortType !== 'single' && sortType !== 'multi'){
    			console.log(new Error('Invlid sort type. Only "single" and "multi" is allowed'));
    			return;
    		}

    		fields.forEach(function(field){
    			var _id = field.id;

    			cache[_id] = [];

    			datas.forEach(function(elem){
    				var mapping_val = elem[mapping_field];

    				if(sortType === 'single'){
    					if(mapping_val == _id){
    						cache[_id].push(elem);
    					}
    				}else if(sortType === 'multi'){
    					var _arr = mapping_val.split(',');

    					_arr.forEach(function(val){
    						if(val == _id){
    							cache[_id].push(elem);
    						}
    					});
    				}
    			});
    		});

    		return cache;
    	}
    }
//单一归类例子
    var sex = [
        {id:1, field:"女"},
        {id:2, field:"男"}
    ];

    var persons = [
        {id:1, name:"小明",sex:2},
        {id:2, name:"小黄",sex:2},
        {id:3, name:"小黑黑",sex:1},
        {id:4, name:"小洪",sex:1},

    ];

 // 依据sex性别进行单一归类
    console.log(sortDatas(sex, persons)('sex', "single"))    


//复合归类例子
    var hobby = [
        {id:1,name:'足球'},
        {id:2,name:'篮球'},
        {id:3,name:'排球'},
        {id:4,name:'乒乓球'},
        {id:5,name:'保龄球'},
    ];
    var people = [
        {id:1, name:'小明',hobby:'1,3'}, 
        {id:2, name:'小黄',hobby:'1,4'}, 
        {id:3, name:'小花',hobby:'2,5'}, 
        {id:4, name:'小白',hobby:'1,3,4'}, 
        {id:4, name:'小青',hobby:'2,3,4'}, 
        {id:5, name:'小洪',hobby:'1,3'}, 
        {id:6, name:'小蓝',hobby:'2,4,5'}, 
    ]

    // 依据hobby爱好进行单一归类
    console.log(sortDatas(hobby, people)('hobby', 'multi'))

single指的是单一类型,如例1中,每个person只有一个对应的性别sex,结果中的每个子元素value值会对应单个sex性别;

multi指的是复合类型,如例2中,每个people可能有多个不同的爱好,因此,依据hobby进行分类的时候,结果中的每个子元素value值会对应到多个hobby爱好

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值