js数组对象相同项合并处理、数组对象指定对象字段排序

该篇博客主要探讨了如何根据特定字段对数组对象进行排序,将具有特定值的元素排在后面,并展示了多种数据处理方法,如按'valid'字段排序、按'id'和'name'去重聚合,以及按照'school'字段分组。此外,还介绍了如何将数组对象转换为对象数组。这些方法对于数据处理和分析具有实际应用价值。
摘要由CSDN通过智能技术生成

数组对象指定对象字段排序

在这里插入图片描述
需求:根据valid值来排序 ,将valid为false的排到后面,效果如下图
在这里插入图片描述

sortByKey(array,key){
  return array.sort(function(a,b){
    var x = a[key];
    var y = b[key];
    return((x>y)?-1:((x<y)?1:0));
  })
},

this.rankList =  this.sortByKey(数组对象数据,'valid');

案例一
在这里插入图片描述

var arr = [
	   {"id":"1","name":"张三","value":"1245"},
    {"id":"1","name":"张三","value":"1360"},
    {"id":"2","name":"李四","value":"1120"},
    {"id":"2","name":"李四","value":"1362"},
    {"id":"2","name":"李四","value":"1008"},
    {"id":"3","name":"王五","value":"1360"},
    {"id":"4","name":"赵六","value":"1986"},
    {"id":"4","name":"赵六","value":"1240"}
];

	var map = {},dest = [];
  for(var i = 0; i < arr.length; i++){
    var ai = arr[i];
    if(!map[ai.id]){
      dest.push({
        id: ai.id,
        name: ai.name,
        value: ai.value
      });
      map[ai.id] = ai;
    }else{
      for(var j = 0; j < dest.length; j++){
        var dj = dest[j];
        if(dj.id == ai.id){
          dj.value=(parseFloat(dj.value) + parseFloat(ai.value)).toString();
          break;
        }
      }
    }
  };

案例二

let resData = [
  {
    "name": "住院医疗最高报销",
    "tagName": "医疗",
    "insuredAmount": "6000"
  },
  {
    "name": "身故赔付",
    "tagName": "寿险",
    "insuredAmount": "36.00"
  },
  {
    "name": "烦死了免费陈述事实",
    "tagName": "寿险",
    "insuredAmount": "8888.00"
  },
  {
    "name": "你好,噜噜噜",
    "tagName": "寿险",
    "insuredAmount": "66.00"
  },
  {
    "name": "120种重大疾病确诊赔付",
    "tagName": "重疾",
    "insuredAmount": "350000"
  }
]

解决一

let tempArr = [];
let Data = [];
for (let i = 0; i < resData.length; i++) {
   if (tempArr.indexOf(resData[i].tagName) === -1) {
     Data.push({
       tagName: resData[i].tagName,
       dataInfo: [resData[i]]
     });
     tempArr.push(resData[i].tagName);
   } else {
     for (let j = 0; j < Data.length; j++) {
       if (Data[j].tagName == resData[i].tagName) {
         Data[j].dataInfo.push(resData[i]);
         break;
       }
     }
   }
 }

解决二

let dataInfo = {};
resData.forEach((item, index) => {
	let { tagName } = item;
	if (!dataInfo[tagName]) {
		dataInfo[tagName] = {
			tagName,			
			child: []
		}
	}
	dataInfo[tagName].child.push(item);
});
let list = Object.values(dataInfo); // list 转换成功的数据

案例三

在这里插入图片描述
在这里插入图片描述
解决一

handlerDatas(arr){
  // arr 传过来的原数组  
  let tempArr = [];
  let endData = [];
  for (let i = 0; i < arr.length; i++) {
    if (tempArr.indexOf(arr[i].school) === -1) {
      endData.push({
        school: arr[i].school,
        children: [arr[i]]
      });
      tempArr.push(arr[i].school);
    } else {
      for (let j = 0; j < endData.length; j++) {
        if (endData[j].school == arr[i].school) {
          endData[j].children.push(arr[i]);
          break;
        }
      }
    }
  }
  console.log(endData); // 最终输出
},

解决二

handlerDatas(arr){
  let obj = {};
  arr.forEach((item, index) => {
      let { school } = item;
      if (!obj[school]) {
          obj[school] = {
              school,
              children: []
          }
      }
      obj[school].children.push(item);
  });
  let data = Object.values(obj); // 最终输出
},

扩展延伸: 将数组对象改成对象数组

let arr = [
  { name: '小明',age: 20,school: 'qinghua',},
  { name: '小红',age: 21,school: 'qinghua',},
  { name: '小白',age: 18,school: 'beida',},
  { name: '小黄',age: 19,school: 'beida',},
  { name: '小浪',age: 21,school: 'hafo',},
]

handlerDatas(arr){
  let obj = {};
  arr.forEach((item, index) => {
      let { school } = item;
      if (!obj[school]) {
          obj[school] = {
        school,
              children: []
          }
      }
      obj[school].children.push(item);
  });
  let data = Object.values(obj);
  let newData = {};

  data.forEach((item, i) => {
    let key = item.school;
    let value = item.children;
    newData[key] = value;
  });
  console.log(newData); // 最终输出
},
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值