数组对象常用处理方案(算法思路)

(1)依据数组对象中某个值,将相同的对象合并成一个新对象

数据源是这样的

beforeData: [
        { name: "tony", id: "1", age: "20" },
        { name: "jack", id: "2", age: "21" },
        { name: "tony", id: "3", age: "50" },
        { name: "jack", id: "4", age: "10" },
        { name: "mark", id: "5", age: "22" },
        { name: "mark", id: "6", age: "40" }
      ]

要将数据中name相同的项合并成一个对象

afterData: [
    {name: "tony",origin: [{ name: "tony", id: "1", age: "20" },{ name: "tony", id: "3", age: "50" }]},
    {name: "jack",origin: [{ name: "jack", id: "2", age: "21" },{ name: "jack", id: "4", age: "10" }]},
    {name: "mark",origin: [{ name: "mark", id: "5", age: "22" },{ name: "mark", id: "6", age: "40" }]}
  ]

实现:

let tempArr = [];
    for (let i = 0; i < this.beforeData.length; i++) {
      if (tempArr.indexOf(this.beforeData[i].name) === -1) {
        this.afterData.push({
          name: this.beforeData[i].name,
          origin: [this.beforeData[i]]
        });
        tempArr.push(this.beforeData[i].name);
      } else {
        for (let j = 0; j < this.afterData.length; j++) {
          if (this.afterData[j].name == this.beforeData[i].name) {
            this.afterData[j].origin.push(this.beforeData[i]);
            break;
          }
        }
      }
    }

(2)根据数组中对象的某一个属性值进行排序

如下代码,根据数组对象中的age进行排序

方式一:

var arr = [
    {name:'zopp',age:0},
    {name:'gpp',age:18},
    {name:'yjj',age:8}
];

function compare(property){
    return function(a,b){
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;
    }
}
console.log(arr.sort(compare('age')))

方式二:

students:[
  {name:'baibai',age:32},
  {name:'xiaobai',age:30},
  {name:'gufan',age:21},
  {name:'King',age:45}
]
 
//数组对象方法排序:
function 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));
	})
}
 
//将相应的数组对象传入即可完成排序:
sortByKey(students,age);

(3)数组的值大小排序

如下代码,将数组中的值进行大小排序

let values = [1,2,3,6,4,8];
//小到大排序,如果需要由大到小,把返回的-1和1反过来就可以了
let compare = (x,y) => {
    if(x < y){
        return -1
    }else if(x > y){
        return 1;
    }else{
        return 0;
    }
}
console.log(values.sort(compare)); //[1, 2, 3, 4, 6, 8]

(4)数组中相同元素组合成一个新的数组

现在有一个这样规律的数组,需求是把里面相同元素组合成一个新的数组;

arr=['1','1','1','2',,'3','4','5','5','6','6','7','8','9','9','10']

结果是这样的

newArr = [ [ "1" , "1" , "1" ] , [ "2" ] , [] , [ "3" ] , [ "4" ] , [ "5" , "5" ] , [ "6" , "6" ] , [ "7" ] , [ "8" ] , [ "9" , "9" ] , [ "10" ] ]

实现方式:

var arr=['1','1','1','2',,'3','4','5','5','6','6','7', '8','9','9','10'];
 var newArr = [],
     tempArr = [];
 for(var i=0,j=arr.length;i<j;i++){
    if(arr[i] == arr[i+1]){
        tempArr.push(arr[i]);
    } else {
        tempArr.push(arr[i]);
        newArr.push(tempArr.slice(0));
        tempArr.length = 0;
    }
 }
 console.log(newArr);
 /*[ [ "1" , "1" , "1" ] , [ "2" ] , [] , [ "3" ] , [ "4" ] ,[ "5" , "5" ] , [ "6" , "6" ] ,  [ "7" ] , [ "8" ] , [ "9" , "9" ] , [ "10" ] ]*/

发布了393 篇原创文章 · 获赞 303 · 访问量 134万+

猜你喜欢

转载自blog.csdn.net/qq_24147051/article/details/102836330