验证中...
本周日,苏州开源盛宴,一起聊聊:Devops、K8s、数据库建模、SoLiD、.Net Core、微信开发、去中心化… 点击占座。
JavaScript排序算法,支持普通数组排序,对象数组排序
原始数据 复制代码
/**
* 对象数组排序算法
* @param arr 待排序数组
* @param att String,用于对象数组排序,对象属性(数组序号用“.”连接,如arr[1] => arr.1)
* @param type String,排序的数据类型
* @param toggle boolean,正序/逆序排序标记
* @return {Array} 排序后的数组
*/
function sort(arr, att, type, toggle) {
// 获得属性
let a = [];
function getAtt(obj, attArray, index) {
let o = deepClone(obj);
if(index < attArray.length){
o = obj[attArray[index]];
o = getAtt(o, attArray, ++index);
}
return o;
}
// 对象数组排序
if(typeof att === 'string') {
a = att.split('.');
// 数字比较
if(type === "number") {
for(let i = 0; i < arr.length -1; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(toggle === true){
if(Number(getAtt(arr[i], a, 0)) < Number(getAtt(arr[j], a, 0))) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}else {
if(Number(getAtt(arr[i], a, 0)) > Number(getAtt(arr[j], a, 0))) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
// 字符串比较
if(type === "string") {
for(let i = 0; i < arr.length -1; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(toggle === true){
if(getAtt(arr[i], a, 0).localeCompare(getAtt(arr[j], a, 0)) > 0) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}else {
if(getAtt(arr[i], a, 0).localeCompare(getAtt(arr[j], a, 0)) < 0) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
}
// 普通数组排序
else {
// 数字数组排序
if(type === "number") {
for(let i = 0; i < arr.length -1; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(toggle === true){
if(arr[i] < arr[j]) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}else {
if(Number(arr[i]) > Number(arr[j])) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
// 字符串数组排序
if(type === "string") {
for(let i = 0; i < arr.length -1; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(toggle === true){
if(arr[i].localeCompare(arr[j]) > 0) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}else {
if(arr[i].localeCompare(arr[j]) < 0) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
}
return arr;
}
// 深度复制
function deepClone(obj) {
if(obj === null || typeof obj !== 'object'){
return obj;
}
var newObj = obj instanceof Array ? [] : {};
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
if(typeof obj[key] === 'object') {
newObj[key] = deepClone(obj[key]);
} else {
newObj[key] = obj[key];
}
}
}
return newObj;
}

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助

14_float_left_people 14_float_left_close