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字串型別排序
- MySQL查詢某個欄位含有字母數字的值MySql
- 欄位按照指定 ID 順序進行排序排序
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- MySQL如何查詢某個欄位含有字母數字的值MySql
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- 按照NSArray內部的某個物件排序物件排序
- Sqlserver的欄位datetime型別預設值設為getdate()時,設值毫秒為000SQLServer型別
- MySQL 數值型別溢位處理MySql型別
- python 對字典的值進行排序Python排序
- GORM 如何讀取別名欄位的值GoORM
- 逆向工程通過某個欄位排序排序
- [JS高程] 特殊的原始值型別JS型別
- arcgis欄位值計算(擷取A欄位前8位+按照順序計算8位)
- 「Js」物件按照鍵名來進行排序JS物件排序
- js數值排序中冒泡演算法的4種簡單實現JS排序演算法
- Linux 中實現按照每一列的類別計算 指定列值的平均數Linux
- mysql資料表按照某個欄位分類輸出MySql
- vue中使用decimal.js對前端數值型別進行高精度計算VueDecimalJS前端型別
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序
- SQL 如何查詢每個分組都出現的欄位值SQL
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- java8的stream將一個List轉為按照某個欄位分組的map,再按照另一個欄位取max最終得到一個mapJava
- Drupal 如何得到欄位的值?
- TypeScript 數值型別TypeScript型別
- Python數值型別Python型別
- 在使用mybatis的請務必注意欄位的大小寫問題,insert時務必注意mapper的返回值型別MyBatisAPP型別
- linux 中awk命令實現按照 指定的字元對文字進行排序Linux字元排序
- laravel-query-builder 對於欄位 值為 null的排序方式LaravelUINull排序
- 請教一下 多欄位值如何排序?排序
- 查詢固定條數的某個值之和
- 【Mongo】mongo更新欄位為另一欄位的值Go
- 二維陣列根據某個欄位排序陣列排序