面试题中往往会遇到这样的笔试题,将以下数组对象合并相同值

  1. var arr = [{
  2. "name": "语文",
  3. "fraction": 80
  4. }, {
  5. "name": "数学",
  6. "fraction": 70
  7. }, {
  8. "name": "语文",
  9. "fraction": 50
  10. }, {
  11. "name": "语文",
  12. "fraction": 90
  13. }, {
  14. "name": "数学",
  15. "fraction": 100
  16. }, {
  17. "name": "数学",
  18. "fraction": 55
  19. }, {
  20. "name": "语文",
  21. "fraction": 99
  22. }]
  1.  

 

  1.  

 

在实际项目中,我们经常会遇到这种格式的数据,这种格式让人阅读起来很不直观,而且不利于代码的维护。废话不多说了直接上代码

第一种方式:

  1. var res =[];
  2. var narr=[];
  3. for(var i =0;i<arr.length;i++){
  4. var n = res.indexOf(arr[i].name);
  5. if(n == -1){
  6. res.push(arr[i].name);
  7. narr.push({"name":arr[i].name,fraction:[arr[i].fraction]})
  8. }else{
  9. narr[n].fraction.push(arr[i].fraction)
  10. }
  11. }
  12. console.log(narr)
  1. 输出结果:
    [{
  2. "name": "语文",
  3. "fraction": [80, 50, 90, 99]
  4. }, {
  5. "name": "数学",
  6. "fraction": [70, 100, 55]
  7. }, {
  8. "name": "英语",
  9. "fraction": [55, 89]
  10. }]

第二种方式:

  1. arr = arr.map(function(item, index, arr) {
  2. const i = arr.find(_item => item.name === _item.name);
  3. if(i !== item) {
  4. i.fraction.push(item.fraction);
  5. return undefined;
  6. } else {
  7. i.fraction = [i.fraction];
  8. return i;
  9. }
  10. }).filter(item => item !== undefined);
  1. 输出结果:
  2. [{
  3. "name": "语文",
  4. "fraction": [80, 50, 90, 99]
  5. }, {
  6. "name": "数学",
  7. "fraction": [70, 100, 55]
  8. }, {
  9. "name": "英语",
  10. "fraction": [55, 89]
  11. }]

 

这样看起来是不是顺眼多了。

本人所发博客都是自己所遇到的,从踩坑到填坑的问题。希望与大家多多交流讨论。

 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Consolas; color: #f9f9f5 }
span.s1 { color: #75e0f2 }
span.s2 { color: #fd4485 }
span.s3 { color: #bd99ff }
span.s4 { color: #ebe087 }
span.Apple-tab-span { white-space: pre }

版权声明:本文为hubovv原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hubovv/p/9111075.html