2017-11-29 16 views
0
let arr = [{ 
    name: 'Apple', 
    trades: [{ 
    date: '2017.01.01', 
    volume: 100 
    }, { 
    date: '1995.02.01', 
    volume: 150 
    }, { 
    date: '2008.01.01', 
    volume: 250 
    }] 
}] 

こんにちは、JavaScriptでネストされたオブジェクトをソートするための多くのドキュメントを検索しましたが、私のケースの方法を見つけることができず、何時間も苦労しました。上記のオブジェクトの配列をソートできますか?私は結果は私がこれをどのように行うことができます。このJavaScript内のオブジェクトのネストされた配列をソートする

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

ようtrades.dateして、オブジェクトのソート配列であると予想何

+0

問題を解決するためにこれまでに何を行っていますか? – Andreas

+0

@Lalitボリュームがソートされている場合、出力のソート基準はどのようになりますか? O.o – Andreas

+0

こんにちは@Juntae、あなたはGoogleへのアクセスを持っていないと想像して、あなたの最初のステップは何ですか? – leaf

答えて

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

を返す関数では、Arrays.sort使用することができます。逆順でソートする場合は、戻りコードでaとbを入れ替えます。

1

まず、配列内の日付は文字列である必要があります。あなたは、より結果あなたがこれを達成するために、配列のソート方法を使用することができます

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);

1

array.sort()datetimeについてはJavascriptを参照してください。

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)=>{ 
 
\t return (new Date(tradeA.date) - new Date(tradeB.date)) * (-1) 
 
    // or return (new Date(tradeB.date) - new Date(tradeA.date)) 
 
}))

0

あなたの日付フォーマットを確認し、ドットは、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])