0
点赞
收藏
分享

微信扫一扫

尚硅谷-宋红康-JVM上中下篇完整笔记-JVM上篇_内存与垃圾回收篇

sort() 方法对数组的项目进行排序。 

排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。

默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。

 

一、语法

 注释:sort() 方法会改变原始数组。

二、参数

可选。定义替代排序顺序的函数。

该函数应返回负值、零值或正值,具体取决于参数,例如:

function(a, b){ return a-b }

sort() 方法比较两个值时,将值发送给比较函数,根据返回的(负、零、正)值对值进行排序。

举例,a和b 两个将要被比较的元素:

三、返回值 

排序后的数组。请注意,数组已原地排序,并且不进行复制。

四、应用

1、 未指明参数时

①  非数字:字符串排序,可以直接使用sort()方法

var fruits = ["Banana", "Orange", "Apple", "Mango", "Blueberries"];
fruits.sort(); // ["Apple", "Banana", "Blueberries", "Mango", "Orange"]
var arr = ['h','a','k','c','e'];
arr.sort();
console.log(arr)  // ["a", "c", "e", "h", "k"]

按字母顺序对数组进行排序,然后反转排序项的顺序(降序):

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
console.log(fruits) //  ["Orange", "Mango", "Banana", "Apple"]

② 数字 

var arr = [12, 22, 66, 3]
arr.sort()
console.log(arr) // [12, 22, 3, 66]

2、指明了参数时

 ① 按 升序 对数组中的数字进行排序:a-b

var points = [4, 10, 1, 5, 25, 10];
points.sort(function(a, b){ return a-b });
console.log(points) // [1, 4, 5, 10, 10, 25]

 ② 按 降序 对数组中的数字进行排序:b-a

var points = [4, 10, 1, 5, 25, 10];
points.sort(function(a, b){ return b-a });
console.log(points) // [25, 10, 10, 5, 4, 1]

③ 获取数组中的最小值

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){ return a-b });    // 按升序对数组中的数字进行排序

// 数组中的第一项 (points[0]) 现在是最小值

 ④ 获取数组中的最大值

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){ return b-a });    // 按降序对数组中的数字进行排序

// 数组中的第一项 (points[0]) 现在是最大值

 ⑤ 根据对象的某个属性进行排序:

var arr = [
  { name: 'W', age: 21 },
  { name: 'M', age: 37 },
  { name: 'X', age: 18 },
  { name: 'M', age: -12 },
  { name: 'J', age: 15 },
  { name: 'B', age: 19 }
 ];

// 依据age排序
arr.sort(function(a, b) {
    return(a.age - b.age)
});
console.log(arr); // 0: {name: "M", age: -12}
                  // 1: {name: "J", age: 15}
                  // 2: {name: "X", age: 18}
                  // 3: {name: "B", age: 19}
                  // 4: {name: "W", age: 21}
                  // 5: {name: "M", age: 37}


// 依据name排序
arr.sort(function(a,b) {
    var nameA = a.name;
    var nameB = b.name;
    if(nameA < nameB) {
      return -1;
    }
    if(nameA > nameB) {
      return 1;
    }
    return 0;
})
console.log(arr); // 0: {name: "B", age: 19}
                  // 1: {name: "J", age: 15}
                  // 2: {name: "M", age: -12}
                  // 3: {name: "M", age: 37}
                  // 4: {name: "W", age: 21}
                  // 5: {name: "X", age: 18}

⑥ 非ASCII字符排序(如类似 e, é, è, a, ä 等字符的字符串)

var a = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
a.sort(function (a, b) {
    return a.localeCompare(b);
});

console.log(a); // ["adieu", "café", "cliché", "communiqué", "premier", "réservé"]

 ⑦ 使用映射对含有大小写的字符串进行排序

    // 需要被排序的数组
    var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
 
    // 对需要排序的数字和位置的临时存储
    var mapped = list.map(function(el, i) {
      return { index: i, value: el.toLowerCase() };
    })

    console.log(mapped) // 0: {index: 1, value: "delta"}
                        // 1: {index: 3, value: "alpha"}
                        // 2: {index: 2, value: "charlie"}
                        // 3: {index: 0, value: "bravo"}
 
    // 按照多个值排序数组
    mapped.sort(function(a, b) {
      return +(a.value > b.value) || +(a.value === b.value) - 1;
    });

    console.log(mapped) // 0: {index: 1, value: "alpha"}
                        // 1: {index: 3, value: "bravo"}
                        // 2: {index: 2, value: "charlie"}
                        // 3: {index: 0, value: "delta"}

    // 根据索引得到排序的结果
    var result = mapped.map(function(el){
      return list[el.index];
    });

    console.log(result); // ["alpha", "bravo", "CHARLIE", "Delta"]

 

 

举报

相关推荐

0 条评论