[英]Sort nested array of object in javascript
let arr = [{
name: 'Apple',
trades: [{
date: '2017.01.01',
volume: 100
}, {
date: '1995.02.01',
volume: 150
}, {
date: '2008.01.01',
volume: 250
}]
}]
Hello, I googled many documents for sorting nested object in JavaScript, but I couldn't find the way of my case and I struggled so many hours so I want to ask to how can I sort above array of objects. 您好,我在Google上搜索了许多文档,以对JavaScript中的嵌套对象进行排序,但是我找不到解决问题的方法,因此我费了很多时间才想问一下如何对对象数组进行排序。
What I expected result is sort array of object by trades.date
like this 我期望的结果是像这样通过
trades.date
对对象进行排序的数组
sortedArray = [{
name: 'Apple',
trades: [{
date: '2017.01.01',
volume: 100
}, {
date: '2008.01.01',
volume: 250
}, {
date: '1995.02.01',
volume: 150
}]
}]
How can I do this? 我怎样才能做到这一点?
arr[0].trades.sort(function(a, b) {
return (new Date(b.date) - new Date(a.date));
});
You can use the array's sort method for achieving this. 您可以使用数组的sort方法来实现此目的。 If you want to sort in the reverse order then just swap a and b in the return code.
如果要以相反的顺序排序,则只需在返回代码中交换a和b即可。
First in your array, date needs to be a string. 在您的数组中,第一个日期必须是一个字符串。 You can than use arrays.sort with a function which returns the result
然后,您可以将arrays.sort与返回结果的函数一起使用
let arr = [ { name : 'Apple', trades : [ {date : "2017.01.01", volume : 100 }, {date : "1995.02.01", volume : 150 }, {date : "2008.01.01", volume : 250 } ] } ] function compare(a,b) { var dateA = new Date(a.date); var dateB = new Date(b.date); if (dateA > dateB) return -1; if (dateA < dateB) return 1; return 0; } arr[0].trades.sort(compare); console.log(arr);
Read about array.sort()
and datetime
in Javascript. 阅读有关
array.sort()
和datetime
的信息。
let arr = [{ name: 'Apple', trades: [{ date: '2017.01.01', volume: 100 }, { date: '1995.02.01', volume: 150 }, { date: '2008.01.01', volume: 250 }] }] console.log(arr[0].trades.sort((tradeA, tradeB)=>{ return (new Date(tradeA.date) - new Date(tradeB.date)) * (-1) // or return (new Date(tradeB.date) - new Date(tradeA.date)) }))
Ensure your date format, dot is not an iso delimiter. 确保您的日期格式点不是iso分隔符。
let toArr = (aDate) => aDate.split('.')
let toDate = ([year, month, day]) => new Date(year, month - 1, day)
let compareTrades = (a, b) => toDate(toArr(a.date)) - toDate(toArr(b.date))
let arr = [{
name: 'Apple',
trades: [{
date: '2017.01.01',
volume: 100
}, {
date: '1995.02.01',
volume: 150
}, {
date: '2008.01.01',
volume: 250
}]
}]
arr[0].trades.sort(compareTrades)
console.log(arr[0])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.