简体   繁体   English

在javascript中对对象的嵌套数组进行排序

[英]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.

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