数组对象排序

一、普通数组

//  js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如:

let arr1 = [12, 34, 2, 42, 456, 234];

console.log(arr1.sort()); //12,2,234,42,456

let arr2 = ['a', 'b', 'u', 'Q', 'S', 'A'];

console.log(arr2.sort());

// 比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。

//升序

let compareSec = function (obj1, obj2) {

if (obj1 > obj2) {

return 1

}

else if (obj1 < obj2) {

return -1

}

else {

return 0

}

}

console.log(arr1.sort(compareSec))

console.log(arr2.sort(compareSec))

//降序,

let compareAsce = function (obj1, obj2) {

if (obj1 < obj2) {

return 1

}

else if (obj1 > obj2) {

return -1

}

else {

return 0

}

}

console.log(arr1.sort(compareAsce))

console.log(arr2.sort(compareAsce))

 

// 我们并不能用比较函数比较一个不能转化为数字的字符串与数字的顺序:

var arr = ["b", 5];

console.log(arr.sort(compareSec))

// 结果是 ["b", 5] 。因为比较函数在比较时,会把先把字符串转化为数字,然后再比较,字符串b不能转化为数字,所以就不能比较大小。然而,当不用比较函数时,会比较ASCII值,所以结果是 [5, "b"] 。

console.log(arr.sort());

 

二、数组对象

let arr1 = [

{ name: 'zjl', age: 23, love: 'dwb' },

{ name: 'dwb', age: 24, love: 'zjl,zmf' },

{ name: 'zmf', age: 22, love: 'dwb' },

{ name: 'sliu', age: 29, love: 'abc' },

{ name: 'zjl', age: 22, love: 'dwb' },

];

let compare = function (obj1, obj2) {

let value1 = obj1.age;

let value2 = obj2.age;

if (value1 > value2) {

return 1;

} else if (value1 < value2) {

return -1;

} else {

return 0;

}

};

console.log(arr1)

console.log(arr1.sort(compare));

// 但是对age属性进行排序时需要注意了,如果age属性的值是数字,那么排序结果会是我们想要的。但很多时候我们从服务器传回来的数据中,属性值通常是字符串。

// 我们的期望是5排在25前面,但是结果不是。这是因为当两个数字字符串比较大小时,会比较它们的ASCII值大小,比较规则是:从第一个字符开始,顺次向后直到出现不同的字符为止,然后以

// 第一个不同的字符的ASCII值确定大小。所以"24"与"5"比较大小时,先比较”2“与"5"的ASCII值,显然”2“的ASCII值比"5"小,即确定排序顺序。

// 现在,我们需要对比较函数再做一些修改:

let arr2 = [

{ name: 'zjl', age: '23', love: 'dwb' },

{ name: 'dwb', age: '24', love: 'zjl,zmf' },

{ name: 'zmf', age: '22', love: 'dwb' },

{ name: 'sliu', age: '29', love: 'abc' },

{ name: 'zjl', age: '22', love: 'dwb' },

];

let compareAll = function (prop) {

return function (obj1, obj2) {

var val1 = obj1[prop];

var val2 = obj2[prop];

if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {

val1 = Number(val1);

val2 = Number(val2);

}

if (val1 < val2) {

return -1;

} else if (val1 > val2) {

return 1;

} else {

return 0;

}

}

};

console.log(arr1.sort(compareAll("age")))

console.log(arr2.sort(compareAll("age")))

//只是最近项目中遇到了对数组对象进行排序的问题,所以在这里在网上找了一些文章写分享一下,相信总能帮到一些朋友。

原文地址:https://www.cnblogs.com/xljzlw/p/3694861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值