json数组合并和去重

将图一的json转化为图二的形式,也就是在相同的id时,将keyIds拼接到一起。本人写了个呆呆的且不严谨的方法。

		 //一维数组去重
		  var arr = []
		  for(var i = 0 ; i< questionParams.length; i++){
			  arr.push(questionParams[i].id)
		  }
		  //将多选的选项添加进去
		  var Ids = [];				 
		  for( var j in dedupe(arr)){
			  for(var i = 0 ; i< questionParams.length; i++){				  
			  if( questionParams[i].id == dedupe(arr)[j]){
				  Ids.push(questionParams[i].keyIds);
				  questionParams[i].keyIds = Ids.join(",")
			  }  
		  }
		  Ids = []; 
		  }
		  questionParams = questionParams.reverse()
	       var temp = {};//用于id判断重复
	       var  result = [];//最后的新数组
	      //将数组倒序排放,遍历数组,将每个item.id在temp中是否存在值做判断,
	       //如不存在则对应的item赋值给新数组,并将temp中item.id对应的key赋值,
	       //下次对相同值做判断时便不会走此分支,达到判断重复值的目的;
	        questionParams.map(function(item,index){
		        if(!temp[item.id]){
		            result.push(item);
		            temp[item.id] = true
		        }
		    })
		    questionParams = result.reverse()

大佬给我写了个简单的方法。

   var temp = {};      // 定义一个空对象
          var w = questionParams; // 取得要遍历的数据
          w.forEach(function(item){    // forEach循环遍历,item是数组元素
           var skey = item.id + item.describe; // 取的元素不需要合并的数据,作为对象的key,利用他的唯一性,求的对应的value
           if(typeof temp[skey] == 'undefined'){  // 如果temp对应的对象key不存在 
            temp[skey] = item; // 首次给 该 key 赋值上对应的value
           }else {
     // 如果存在,先把存在key 对应的value转化为字符串.判断是否已经合并,如果已经合并,结束
            if(temp[skey]['keyIds'].toString().indexOf(item['keyIds']) == -1){
             var v = [temp[skey]['keyIds'],item['keyIds']];    //  放在一个数组里
             temp[skey]['keyIds'] = v.join(",")         // 转化为字符串
            }
            
           }
          })
          var result = [];
          for ( var i in temp){   // 遍历得到的temp对象
           result.push(temp[i]);  
          }
          console.log(result)

三年啊,要继续加油啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值