@semechki
Я не фрилансер, просто пишу код для себя.

Как отсортировать json массив по дате?

Добрый день, мне приходят вот такие массивы:
blocks: Array(1)
0:
 blockHeight: 58
 transactions: Array(1)
 0:
  amount: 947.7280106740033
  currency: "BTC"
  fee: 0.1
  recipientAddressRank: {address: "user#4", currency: "BTC", suspicion: 0.7374174}
  senderAddressRank: {address: "user#1", currency: "BTC", suspicion: 0.073294}
  transactionHash: "hash"
  unixTimestamp: "1618219971"

Каждый раз данные разные, и разное время unixTimestamp
Мне как-то нужно сортировать их по времени, но всё что не пробовала не работает:
function comp(a, b) {
  return new Date(a.my_array .date).getTime() - new Date(b.my_array .date).getTime();
}

Понимаю, что время в unix, но не могу придумать что-то работающие, заранее спасибо за ваши ответы!
Разбиваю эти массивы на JS+JQuery.
Вот код:
var data = JSON.parse(event.data);
		console.log(data);
		var blockslenght = data.blocks.length;
	        for (var i = blockslenght-1 ; i >= 0; i--) {
	        	var	transactionslenght = data.blocks[i].transactions.length;
	        	for (var t = transactionslenght-1; t >= 0; t--) {
	        		incomingOut += '<tr>';
		        		incomingOut += '<td width="50">';
		        		incomingOut += '<img src="static/image/'+data.blocks[i].transactions[t].currency+'.png">';
		        		incomingOut += '</td>';
		        		incomingOut += '<td width="75" class="currency">';
		        		incomingOut += '<p>'+data.blocks[i].transactions[t].currency+'</p>';
		        		incomingOut += '</td>';
		        		incomingOut += '<td width="375">';
		        		incomingOut += '<p class="hash">'+data.blocks[i].transactions[t].transactionHash;
		        		incomingOut += '<span class="date">'+convertTimestamp(data.blocks[i].transactions[t].unixTimestamp)+'</span></p>';
		        		incomingOut += '</td>';
		        		incomingOut += '<td width="250">';
		        		incomingOut += '<p class="amount">'+data.blocks[i].transactions[t].amount + ' ' + data.blocks[i].transactions[t].currency + '</p>';
		        		incomingOut += '<span class="circle" style="background:'+color+'" title="'+data.blocks[i].transactions[t].suspicion+'"></span>';
		        		incomingOut += '</td>';
		        		incomingOut += '<td>';
		        		incomingOut += '<a href="#" class="detailed"></a>';
		        		incomingOut += '</td>';
	        		incomingOut += '</tr>';
	        	}
	        }
    	$('.incoming .content table').html(incomingOut);

Получаю json через WS соединение.
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Unix-время (англ. Unix time, также POSIX-время) — система описания моментов во времени, принятая в Unix и других POSIX-совместимых операционных системах. Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); этот момент называют «эпохой Unix» (англ. Unix Epoch).

Для сравнения этих дат достаточно просто сравнить два числа.
Если, как вы выразились "время в unix" больше какого-то другого, то оно позже. Если меньше - то раньше. А если отнять одно от другого, то можно даже разницу вычислить. Магия.
Ответ написан
@StiflerProger
const data = JSON.parse(event.data);

for (let block of data.blocks) {
  // перебираем блоки
  // сортируем транзакции по дате
  // замени "a" с "b" если нужна сортировка в  другую сторону
  block.transactions.sort((a, b) => Number(a.unixTimestamp) - Number(b.unixTimestamp))

	for (let transaction of block.transactions) {
  	incomingOut += '<tr>';
    incomingOut += '<td width="50">';
    incomingOut += '<img src="static/image/' + transaction.currency + '.png">';
		// и так далее
	}
}

$('.incoming .content table').html(incomingOut);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы