简体   繁体   English

如何通过整数列(例如“ 3”,“ 2”,“ 5”)对json对象进行排序

[英]How to sort a json object by integer colum like “3”, “2”, “5”

I want to sort a json object that has a column contains numbers. 我想对具有包含数字的列的json对象进行排序。 But it sorting incorrect because the column is string type. 但是它排序不正确,因为列是字符串类型。 How can i sort string numbers by number order? 如何按数字顺序对字符串进行排序?

 var myArray = [{ name: 'David', total: "6" }, { name: 'John', total: "2" }, { name: 'Joe', total: "8" }, { name: 'Ana', total: "14" }]; var ascending; var descending; function test1() { ascending = _.sortBy(myArray, 'total'); console.log(JSON.stringify(ascending)); } function test2() { descending = ascending.reverse(); console.log(JSON.stringify(descending)); } 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script> <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

Use _.sortBy() with a callback, and convert the total to a number: _.sortBy()与回调一起使用,并将total转换为数字:

 var myArray = [{"name":"David","total":"6"},{"name":"John","total":"2"},{"name":"Joe","total":"8"},{"name":"Ana","total":"14"}]; var ascending; var descending; function test1() { ascending = _.sortBy(myArray, v => Number(v.total)); console.log(JSON.stringify(ascending)); } function test2() { descending = ascending.reverse(); console.log(JSON.stringify(descending)); } 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script> <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

You can do it like this 你可以这样

Here in sort for comparison we have to change string to number. 在这里,在sort进行比较,我们必须改变串号。

 var myArray = [{ name: 'David', total: "6" }, { name: 'John', total: "2" }, { name: 'Joe', total: "8" }, { name: 'Ana', total: "14" }]; var ascending; var descending; function test1() { ascending = myArray.sort((a,b)=>Number(a.total)-Number(b.total)); console.log(JSON.stringify(ascending)); } function test2() { descending = ascending.reverse(); console.log(JSON.stringify(descending)); } 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script> <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

Use map to create a new array where the value of total will be a number. 使用map创建一个新的数组,其中total的值将是一个数字。 Then use sort function. 然后使用排序功能。

The below function sorts the array in ascending order 下面的函数按升序对数组进行排序

 var myArray = [{ name: 'David', total: "6" }, { name: 'John', total: "2" }, { name: 'Joe', total: "8" }, { name: 'Ana', total: "14" }]; let sortedOrder = myArray.map((item) => { return { name: item.name, total: parseInt(item.total, 10) } }).sort((a, b) => { return a.total - b.total; }) console.log(sortedOrder) 

 var myArray = [{ name: 'David', total: "6" }, { name: 'John', total: "2" }, { name: 'Joe', total: "8" }, { name: 'Ana', total: "14" }]; var ascending; var descending; /** * Ascending * Calls the sort function of the Array object. * - Processed the "total" property of each object. * -- Parsing each string number into a int for comparision. */ function test1() { ascending = myArray.sort(function(a, b) { return parseInt(a['total']) > parseInt(b['total']); }); console.log(JSON.stringify(ascending)); } /** * Descending * Calls the sort function of the Array object. * - Processed the "total" property of each object. * -- Parsing each string number into a int for comparision. */ function test2() { descending = myArray.sort(function(a, b) { return parseInt(a['total']) < parseInt(b['total']); }); console.log(JSON.stringify(descending)); } 
 <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

No need for loadlash, just use .sort() will do the need. 不需要loadlash,只需使用.sort() take a look at the snippet 看一下片段

 var myArray = [{ name: 'David', total: "6" }, { name: 'John', total: "2" }, { name: 'Joe', total: "8" }, { name: 'Ana', total: "14" }]; var ascending; var descending; function test1() { ascending = myArray.sort(function(a,b){ return Number(a.total) - Number(b.total); }); console.log(ascending) } function test2() { descending = myArray.sort(function(a,b){ return Number(b.total) - Number(a.total); }); console.log(descending); } 
 <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

Implement like below for sorting by property "total" - 像下面那样实现按属性“总计”排序-

function getSortOrder(prop) {  
    return function(a, b) {  
        if (parseInt(a[prop]) > parseInt(b[prop])) {  
            return 1;  
        } else if (parseInt(a[prop]) < parseInt(b[prop])) {  
            return -1;  
        }  
        return 0;  
    } 
}
array.sort(getSortOrder("total")); 

You can use _.orderBy 您可以使用_.orderBy

 var myArray = [{"name":"David","total":"6"},{"name":"John","total":"2"},{"name":"Joe","total":"8"},{"name":"Ana","total":"14"}]; var ascending; var descending; function test1() { ascending = _.orderBy(myArray, v => parseInt(v.total),['asc']); console.log(JSON.stringify(ascending)); } function test2() { descending = _.orderBy(myArray, v => parseInt(v.total),['desc']); console.log(JSON.stringify(descending)); } 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script> <button onclick="test1()">Ascending</button> <button onclick="test2()">Descending</button> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM