奇葩的数据格式要求:把数组里不同的对象按各自在相同的对象里的排列先后顺序一一对应匹配组合成新对象,并最终组成新数组

一、需要处理的数据如下:

let listlist = [{"character":"给留守儿童送温暖"},  {"health":"休闲鞋"},   {"health":"运动鞋"},   {"health":"荧光鞋"},  {"artistic":"天空之城钢琴独奏"},  {"character":"环境保护宣传"},  {"character":"成为少先队员"},  {"practice":"A"}, {"practice":"B"},  {"level":"文言文"},  {"level":"牛顿第一定律"},  {"level":"重力加速度"}];

二、分析该数组:可以看出改数组是个对象数组,每个对象里只有一个属性值。数组里有位置不同的相同的对象;数组里也有不同的对象。

三、数据格式处理要求:把数组里不同的对象按各自在相同的对象里的排列先后顺序一一对应匹配成新对象,并最后组成新数组。预期处理后数据格式展示如下:

 [{"character":"给留守儿童送温暖", "health":"休闲鞋", "artistic":"天空之城钢琴独奏", "practice":"A", "level":"文言文"},

{"character":"环境保护宣传","health":"运动鞋","artistic":"","practice":"B","level":"牛顿第一定律"},

{"character":"成为少先队员","health":"荧光鞋","artistic":"","practice":"","level":"重力加速度"}];

四、JS中相关格式化代码如下:

let listlist = 
       [{"character":"给留守儿童送温暖"},{"health":"休闲鞋"},{"health":"运动鞋"},
		{"health":"荧光鞋"},{"artistic":"天空之城钢琴独奏"},{"character":"环境保护宣传"},
		{"character":"成为少先队员"},{"practice":"A"},{"practice":"B"},
		{"level":"文言文"},{"level":"牛顿第一定律"},{"level":"重力加速度"}];

  //首先把原对象数组中相同的对象组成一个个同类型数组,如下:
  var characterList = listlist.filter(function (item) {
	return item.hasOwnProperty("character");;
  })
  var healthList = listlist.filter(function (item) {
	return item.hasOwnProperty("health");
  })
  var artisticList = listlist.filter(function (item) {
	return item.hasOwnProperty("artistic");

  })
  var practiceList = listlist.filter(function (item) {
	return item.hasOwnProperty("practice");

  })
  var levelList = listlist.filter(function (item) {
	return item.hasOwnProperty("level");
  })
  //定义新数组,用于存放最终的需要格式的一一个对象
  var newList = [];
  console.log("相同格式数组:",characterList, healthList, artisticList, practiceList, levelList);
  //characterList长度大于0 进入
  if(characterList.length > 0){
    //循环characterList数组,此处根据需要以characterList进行循环来匹配其他的集合
	characterList.forEach((item1, index1)=>{
       //每次循环,重新定义一个对象,格式如下:
	   var cuObject = {character: "", health: "", artistic: "", practice: "", level: ""};
       //拿当前属性值,并赋值
	   cuObject.character = item1.character;
       //把characterList里面刚才赋值的过的对象,进行剔除,返回剩余的新数组
	   characterList = characterList.filter(function (item2) {
		 return item2 != item1;
	   });
       //healthList长度大于0,则进入
	   if(healthList.length > 0){
          //把当前healthList第一个对象进行赋值
		  cuObject.health =  healthList[0].health;
          //剔除刚才healthList 赋值过的对象,返回剩余的新数组
		  healthList = healthList.filter(function (item2) {
		   return item2 != healthList[0];
		  });
	   }
       //artisticList长度大于0,则进入
	   if(artisticList.length > 0){
          //把当前artisticList第一个对象进行赋值
		  cuObject.artistic =  artisticList[0].artistic;
          //剔除刚才artisticList 赋值过的对象,返回剩余的新数组
		  artisticList = artisticList.filter(function (item2) {
			return item2 != artisticList[0];
		  });
	   }
       //practiceList长度大于0,则进入
	   if(practiceList.length > 0){
         //把当前practiceList第一个对象进行赋值
		 cuObject.practice =  practiceList[0].practice;
         //剔除刚才practiceList 赋值过的对象,返回剩余的新数组
		 practiceList = practiceList.filter(function (item2) {
		   return item2 != practiceList[0];
		  });
	   }
	   //levelList长度大于0,则进入
	   if(levelList.length > 0){
           //把当前levelList 第一个对象进行赋值
		   cuObject.level =  levelList[0].level;
           //剔除刚才levelList 赋值过的对象,返回剩余的新数组
		   levelList = levelList.filter(function (item2) {
			return item2 != levelList[0];
		   });
	   }
	   //每次循环组成新对象后,把此对象放入新数组中
	   newList.push(cuObject);
	});
 }
 console.log("想要的newList:", newList); 

五、最终处理后的浏览器打印效果图如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值