Home > Article > Web Front-end > Implementing Json data sorting based on a certain field based on JavaScript_javascript skills
1. First, let me introduce to you the sort() method built into js
This method sorts the elements in the array in alphabetical order by default. To be more precise, it sorts in the order of character encoding.
Look at the following example:
When the elements in the array are of numeric type, the sorting result is completely different from what we expected, because the default is to sort according to the order of character encoding.
Solution: The sort() method receives an optional parameter (this parameter must be a function). We can define the sorting rules ourselves, as shown below
2. Specific implementation of json sorting
/* * @description 根据某个字段实现对json数组的排序 * @param array 要排序的json数组对象 * @param field 排序字段(此参数必须为字符串) * @param reverse 是否倒序(默认为false) * @return array 返回排序后的json数组 */ function jsonSort(array, field, reverse) { //数组长度小于2 或 没有指定排序字段 或 不是json格式数据 if(array.length < 2 || !field || typeof array[0] !== "object") return array; //数字类型排序 if(typeof array[0][field] === "number") { array.sort(function(x, y) { return x[field] - y[field]}); } //字符串类型排序 if(typeof array[0][field] === "string") { array.sort(function(x, y) { return x[field].localeCompare(y[field])}); } //倒序 if(reverse) { array.reverse(); } return array; }
PS: In JS: json object array is sorted by object properties
var array = [ {name: 'a', phone: 1}, {name: 'b', phone: 5}, {name: 'd', phone: 3}, {name: 'c', phone: 4} ] array.sort(getSortFun('desc', 'phone')); function getSortFun(order, sortBy) { var ordAlpah = (order == 'asc') ? '>' : '<'; var sortFun = new Function('a', 'b', 'return a.' + sortBy + ordAlpah + 'b.' + sortBy + '?1:-1'); return sortFun; } alert(JSON.stringify(array));
The array itself has a sort method, which can specify a sorting function, so a sorting function can be dynamically generated to complete the requirement of sorting by specified object attributes;
Note: The original array sequence will change after sort! !