JS 中数组的排序和去重

在 PHP 中,数组有很多排序方法,不过其他语言的数组中大概是不会像 JS 的数组一样,包罗万象,啥都通吃的。所以 JS 的数组排序情况就略多一些了。

  • 简单粗暴的排序

    •  赤果果的sort:

  var  arr = [‘Jason‘,‘Eric‘,‘Rose‘,‘Paul‘]
  arr.sort()
// arr => [‘Eric‘,‘Jason‘,‘Paul‘,‘Rose‘];

      • 这样排序的前提是数组本身元素类型单一,都为数字或者字符串,默认排序为按照首字母进行增序;
  • 稍微不那么粗暴的:
    •   有排序函数的sort:
      •   var  arr = [‘10‘,‘1000‘,‘3‘,‘20‘];
        arr.sort(); ==> [‘10‘,‘1000‘,‘20‘,‘3‘];
      • //现在我们想按照数字的值大小进行排序 0.0
        //先定义一个排序函数 sortNumber
        function sortNumber(a,b){
           return a-b;
        }
        arr.sort(sortNumber);
    • 在有排序函数的时候,sort 会按照元素的 value 去排序,这样做得前提仍然是数组元素类型单一为 number 或者 string,默认也是增序排序的。
      当然我们也可以认为通过指定排序函数返回值的方法来控制数组最终的排序方式:
      • return 1   ==》降序;
      • return -1  ==》增序;
  • 稍微复杂的排序:
      •   上面介绍的排序方法都针对的是简单的数组,但是 JS 的数组是很复杂的,大多数情况我们处理后台返回的数据都会遇到数组中包含各种复杂的对象。这样听起来比较抽象,说一个我自己做东西的例子吧。假如现在有一个论坛,页面上成千上万的帖子,用户有一个搜索动作,但是进行的是模糊查询,他可能是按照帖子的作者author,帖子的名称title,或者帖子内容message查询的。帖子是存在 mongoDB中,我们根据用户输入的关键字,将其视为 title,author,message 进行查询,这样就获得了三个结果集,arr1,arr2,arr3。然后我们需要将结果集进行合并,得到 arr4。那么现在问题来了,我们如果直接合并三个结果集,其中必然有重复的帖子,这就涉及到数组的去重。当然,这里有一个方案,在合并三个结果集时,依次向新结果集逐个元素插入然后每次插入新元素去结果集中检索有没有当前要插入的元素,如果有就丢弃。但是这样每插入一个元素就要遍历整个数组并且还要对每个元素进行属性的遍历,很容易导致性能问题,所以这里介绍一下方案二,就是先暴力的合并,然后排序,最后进行去重处理。
      • 要去重,我们先进行一下排序。注意,这里的数组元素就是各种复杂的对象了,但是这些对象都有唯一标识就是_id属性,所以我们就根据它们的_id 进行排序,这样相同的元素就处在了相邻的位置。
        • 定义排序函数 sortByKey:根据_Id 进行排序:
          var sortedArr = arr.sort(sortByKey(‘_id‘));
          var result = [];

          •   function sortByKey (key){
                  return function(a,b){
                             return a[key] - b[key];
                      } 
                  }
        • 去重生成最终结果集result:
          (fucntion(){
              var len = sortedArr.length;
            for(var i=0; i<len;i++){
                  if(sortedArr[i]._id !== sortedArr[i+1]._id){
                      result.push(sortedArr[i]);
                  }
              }
          })()

JS 数组博大精深,数据处理时用到的非常频繁,用的不好通常会影响性能,欢迎各位道友批评指正,说说心得

时间: 2024-08-09 19:55:30

JS 中数组的排序和去重的相关文章

JS数组去重,js中数组(Array)的排序(sort)

JS数组去重 var ddd = [1,2,4,5,2, 222,1,5,6]; var uq = {}; var rq = []; for(var i=0; i<9; i++){ if(!uq[ddd[i]]){ uq[ddd[i]] = true; rq.push(ddd[i]); } } return rq; js中数组(Array)的排序(sort)注意事项 var arrDemo = new Array(); arrDemo[0] = 10; arrDemo[1] = 50; arrD

js中数组去重的几种方法

js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                         for(var i=0;i<arr.length;i++){                                 for(var j=i+1;j<arr.length;j++){                                         if(ar

js中数组Array的操作

JS中数组有很多操作,作为前端多多少少知道点,但每次要用时都需要去百度,有点麻烦,所以在这儿做个备忘,简单总结些平时最常用的数组操作. shift:删除原数组第一项,并返回删除元素的值: var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1 注:如果数组为空则返回undefined unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,2,3,4,5]; var b = a.unshift(-2,-1); /

js中数组操作

var selectedCodeArray = []; var num = $.inArray(值, selectedCodeArray)  //值在数组中的位置 selectedCodeArray.push(值码); selectedCodeArray.splice(num, 1);//从数组中删除 js中数组操作,布布扣,bubuko.com

js中数组与对象的遍历

数组遍历: 1.js基本的for遍历 2.jquery提供的each函数 ----------------------------------- $.each(array, function(){ alert(this); }); ----------------------------------- 对象遍历: js: --------------------------------------------- for (var k in obj) { alert(obj[k]): } jque

js中数组增删查改unshift、push、pop、shift、slice、indexOf、concat、join

js中数组增删查改unshift.push.pop.shift.slice.indexOf.concat.join 原文地址:https://www.cnblogs.com/mahmud/p/10301590.html

JS中数组去重

JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉,而且有时候会出现问题,所以对数组去重可以利用如下方法: 先对数组a进行遍历,同时创建一个新的数组对象arr for (var i=0 ;i<a.length;i++) {    if (arr.indexOf(a[i]) == -1) { arr.push(a[i]) } } 经过这样处理后的数组

JS中数组对象去重

JS数组去重 JS中对数组去重最好不要用unique方法,该方法主要是对dom节点数组的去重,如果对普通的数组元素去重只会去掉与之相邻的重复元素,也就是如果数组中还有不相邻的重复元素存在,将不会被去掉,而且有时候会出现问题,所以对数组去重可以利用如下方法: 先对数组a进行遍历,同时创建一个新的数组对象arr for (var i=0 ;i<a.length;i++) {    if (arr.indexOf(a[i]) == -1) { arr.push(a[i]) } } 经过这样处理后的数组

JS中数组Array的用法示例介绍 (转)

new Array() new Array(len) new Array([item0,[item1,[item2,...]]] 使用数组对象的方法: var objArray=new Array(); objArray.concact([item1[,item2[,....]]]-------------------将参数列表连接到objArray的后面形成一个新的数组并返回,原有数组不受影响.如:var arr=["a","b","c"];