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

时间:2017-11-29 05:52:33

标签: javascript arrays sorting

let arr = [{
  name: 'Apple',
  trades: [{
    date: '2017.01.01',
    volume: 100
  }, {
    date: '1995.02.01',
    volume: 150
  }, {
    date: '2008.01.01',
    volume: 250
  }]
}]

您好,我用Google搜索了许多用于在JavaScript中对嵌套对象进行排序的文档,但是我无法找到我的案例方式,而且我在这么多时间内遇到了困难所以我想问一下如何对上面的对象数组进行排序。

我期望的结果是像trades.date这样的对象的排序数组

sortedArray = [{
  name: 'Apple',
  trades: [{
    date: '2017.01.01',
    volume: 100
  }, {
    date: '2008.01.01',
    volume: 250
  }, {
    date: '1995.02.01',
    volume: 150
  }]
}]

我该怎么做?

4 个答案:

答案 0 :(得分:4)

arr[0].trades.sort(function(a, b) {
    return (new Date(b.date) - new Date(a.date));
});

您可以使用数组的排序方法来实现此目的。如果您想以相反的顺序排序,那么只需在返回码中交换a和b。

答案 1 :(得分:1)

首先在数组中,date必须是一个字符串。您可以使用带有返回结果的函数的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);

答案 2 :(得分:1)

在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))
}))

答案 3 :(得分:0)

确保您的日期格式,dot不是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])