数组去重 重复的次数 根据id或者相同的数据来分类数据

1.。数组去重

(1).下标去重

function unquire (arr){
  var dest = [];
  for(var i = 0 ; i < arr.length ; i ++){
    if(dest.indexOf(arr[i]) == -1){
      dest.push(arr[i])
    }
  }
  return dest
}

arr.indexOf(str);就是在arr中搜索str,返回str在arr中第一次出现的位置  如果找不到则返回-1;

(2)。常规去重

先排序 在根据排序 来去重;

function unquire1 (arr) {
  var arr = arr.sort();
  var dest = [];
  for(var i = 0; i < arr.length;){
    var count = 0;
    for(var j = i; j < arr.length; j ++) {
      if(arr[i] === arr[j]){
        count ++;
      }
    }
    dest.push(arr[i]);
    i += count;
  }
  return dest
}

先进行排序 然后将当前元素与后续的元素进行比较,,如果相等则外层循环 的次数加上重复的次数(注意使用===  因为==只强调数值相等即可不进行类型的强转换);;  同时利用这个函数也能进行数组中相同元素重复次数的;

既  将dest.push(arr[i]) 更改成 dest.push([arr[i],count])  就能返回一个二维数组  二维数组里 第一个为重复的数,第二个为重复的次数;(111111111)

(3)基本去重 立flag;

function unquire2(arr) {
  var dest = [arr[0]];
  for(var i = 0; i < arr.length; i ++){
    var isUnquire = true;
    for(var j = 0; j < dest.length; j ++){
      if(arr[i] === dest[j]){
        isUnquire = false;
      }
    }
    if(isUnquire) {
      dest.push(arr[i])
    }
  }
  return dest ;
}

把原数组的第一个赋予新数组,然后把原数组的每一个数与新数组作比较 如果相等就是有重复的,那么在外层循环就不应该吧这个数加入新数组;

 

2  数组的重复次数在数组去重的第二个中有讲过 。。可以参考上面 代码如下;

function repeatNum (arr) {
  var arr = arr.sort();
  var dest = [];
  for(var i = 0; i < arr.length;){
    var count = 0;
    for(var j = i; j < arr.length; j ++) {
      if(arr[i] === arr[j]){
        count ++;
      }
    }
    dest.push([arr[i],count]);
    i += count;
  }
  return dest
}

 

3  根据相同的id 或者name 来处理数据

var arr = [
{
"id": "1001",
"name": "值1",
"value": "111"
},
{
"id": "1001",
"name": "值1",
"value": "11111"
},
{
"id": "1002",
"name": "值2",
"value": "25462"
},
{
"id": "1002",
"name": "值2",
"value": "23131"
},
{
"id": "1002",
"name": "值2",
"value": "2315432"
},
{
"id": "1003",
"name": "值3",
"value": "333333"
}
];

function devide (arr) {
  var obj = {};
  var dest = [];
  for(var i = 0; i < arr.length; i ++){
    var a = arr[i];
    //当访问的对象属性是变量时用方括号来访问属性
    if(!obj[a.id]) {
      dest.push({
          id: a.id,
          name: a.id,
          data: [a]
      })
      //把每个对象的id属性 赋给obj 这样每次循环就能判别会不会出现新的id
      obj[a.id] = a.id;
    } else {
      for(var j = 0; j < dest.length; j ++){
        var b = dest[j]
        if(a.id == b.id) {
          dest[j].data.push(a);
          //找到同样id的之后 后面的就不用循环了 所以跳出循环
          break;
        }
      }
    }
  }
  return dest;
}

 

总的来说就这些了  如有错误请指正

posted on 2017-10-27 17:31  哪有不摇摆就开放的花  阅读(1459)  评论(0编辑  收藏  举报

导航