Js實現Object按照值的某個欄位(數值型別)的大小進行排序
最近,有個需求:將一個Object物件,按照值的某個欄位(數值型)的大小來進行排序。感覺這個需求也算是有點用,也有點意思吧!就記錄分享一下。
看程式碼,寫的很挫,將就著看吧。能用就行,哈哈!
var objs = {
"aaa": { name: "小明", age: 30 },
"bbb": { name: "小紅", age: 20 },
"ccc": { name: "小花", age: 40 }
}
/**
*
* @param {*} obj 物件
* @param {*} property 值裡面的某個屬性欄位
* @param {*} desc 是否降序
*/
function ObjSort(obj, property, desc) {
let same = function (obj1, obj2) {
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if (!o1 || !o2) {/* 判斷不是物件 */
return obj1 === obj2;
}
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
for (var attr in obj1) {
var t1 = obj1[attr] instanceof Object;
var t2 = obj2[attr] instanceof Object;
if (t1 && t2) {
return same(obj1[attr], obj2[attr]);
} else if (obj1[attr] !== obj2[attr]) {
return false;
}
}
return true;
}
var arr = [];
for (var key in obj) {
arr.push(obj[key]);
}
arr.sort((a, b) => {
var value1 = a[property];
var value2 = b[property];
if (desc == true) {
// 升序排列
return value1 - value2;
} else {
// 降序排列
return value2 - value1;
}
});
let oldObj = obj;
let obj2 = {};
let maxIdx = 0;//最大值 的 index
let minIdx = 0;//最小值 的 index
if (desc) {//小到大
maxIdx = arr.length - 1;
minIdx = 0;
while (maxIdx > minIdx) {
for (let key in oldObj) {
if (same(oldObj[key], arr[minIdx])) {
let str = JSON.stringify(arr[minIdx]);
obj2[str] = key;
if (maxIdx > minIdx) {
minIdx++;
}
}
}
}
} else {//大到小
maxIdx = 0;
minIdx = arr.length - 1;
while (maxIdx < minIdx) {
for (let key in oldObj) {
if (same(oldObj[key], arr[maxIdx])) {
let str = JSON.stringify(arr[maxIdx]);
obj2[str] = key;
if (maxIdx < minIdx) {
maxIdx++;
}
}
}
}
}
let newObj = {};
for (let key in obj2) {
newObj[obj2[key]] = JSON.parse(key);
}
return newObj;
}
let newObjs = ObjSort(objs, "age", false);
console.log(newObjs);
執行截圖:
最後特別注意:
當物件的key(鍵)為數字時,Object會自動排序。
相關文章
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- sort按照數值大小排序排序
- 查詢某個欄位的不同值
- MySQL查詢某個欄位含有字母數字的值MySql
- MapReduce 按照Value值進行排序輸出排序
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- 欄位按照指定 ID 順序進行排序排序
- MySQL如何查詢某個欄位含有字母數字的值MySql
- Js比較對Object型別進行排序JSObject型別排序
- 在ASP中讀取ORACLE中的BLOB型別的欄位的值,不用Oracle Object for Object (轉)Oracle型別Object
- MySQL 按照指定的欄位排序MySql排序
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 二維陣列按照其內層陣列的某個鍵值排序陣列排序
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- varchar型別的欄位儲存純數字的排序型別排序
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- 10g PLSQL數值型別的溢位SQL型別
- MySQL 數值型別溢位處理MySql型別
- 按照NSArray內部的某個物件排序物件排序
- GORM 如何讀取別名欄位的值GoORM
- 逆向工程通過某個欄位排序排序
- arcgis欄位值計算(擷取A欄位前8位+按照順序計算8位)
- Sqlserver的欄位datetime型別預設值設為getdate()時,設值毫秒為000SQLServer型別
- [JS高程] 特殊的原始值型別JS型別
- DataGrid中通過CHECKBOX來修改庫裡某個欄位的值
- python 對字典的值進行排序Python排序
- oracle:聯表更新多個欄位的值Oracle
- TypeScript 數值型別TypeScript型別
- Field的getModifiers()方法返回int型別值表示該欄位的修飾符型別
- 「Js」物件按照鍵名來進行排序JS物件排序
- 怎樣獲得資料表中某個欄位的第二個最大值
- js數值排序中冒泡演算法的4種簡單實現JS排序演算法
- char型別的數值轉換型別
- mysql資料表按照某個欄位分類輸出MySql
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序