Javascript объединяет сортировку массива со значениями даты, дающими неожиданные результаты - PullRequest
0 голосов
/ 11 октября 2019

Прежде всего извините, если этот вопрос не актуален. Я не знаком с ecma & javascript. У меня есть 2 объекта.

Я хочу объединить их и отсортировать по полю даты. Идеальное слияние с .push() Но когда я пытаюсь отсортировать его по значению add_date, я получаю неожиданные результаты.

Первый объект:

[
    {
        "type": "Sipari\u015f - # PKXLF1",
        "note": "",
        "add_date": "2019-01-07 01:35:25",
        "value": 448.4
    },
    {
        "type": "Sipari\u015f - # PTO3U8",
        "note": "",
        "add_date": "2019-06-25 20:39:44",
        "value": 472
    },
    {
        "type": "Sipari\u015f - # PTYE1M",
        "note": "",
        "add_date": "2019-07-01 09:56:10",
        "value": 1320.77
    },
    {
        "type": "Sipari\u015f - # PXF079",
        "note": "",
        "add_date": "2019-09-06 16:57:09",
        "value": 1859.68
    },
    {
        "type": "Sipari\u015f - # PZ62E5",
        "note": "",
        "add_date": "2019-10-10 18:13:17",
        "value": 755.2
    }
]

И второй объект;

[
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-01-22 01:35:25",
        "value": 448.4
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-08-02 20:24:57",
        "value": 1000
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-10-04 14:48:55",
        "value": 792
    }
]

Что я пробовал до сих пор;

Как отсортировать массив по свойству даты

Ответ на этот вопрос принят

array.sort(function(a,b){
  // Turn your strings into dates, and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(b.date) - new Date(a.date);
});

Я пытался, но это дало неожиданный результат, как;

0: {type: "Sipariş - # PKXLF1", note: "", add_date: "2019-01-07 01:35:25", value: 448.4}
1: {type: "Sipariş - # PTO3U8", note: "", add_date: "2019-06-25 20:39:44", value: 472}
2: {type: "Sipariş - # PTYE1M", note: "", add_date: "2019-07-01 09:56:10", value: 1320.77}
3: {type: "Sipariş - # PXF079", note: "", add_date: "2019-09-06 16:57:09", value: 1859.68}
4: {type: "Tahsilat - Havale / Eft", note: "Ziraat Bankası Gelen Havale/EFT", add_date: "2019-01-22 01:35:25", value: 448.4}
5: {type: "Tahsilat - Havale / Eft", note: "Ziraat Bankası Gelen Havale/EFT", add_date: "2019-08-02 20:24:57", value: 1000}

Чего мне не хватает? Имеет ли мое add_date поле wrong date values?

Любая помощь сильно ценится!

Ответы [ 3 ]

0 голосов
/ 11 октября 2019

Вы должны преобразовать формат даты в timeStamp. Затем выполните сортировку

.
0 голосов
/ 11 октября 2019

Строки даты в объектах имеют формат, который можно отсортировать лексически, нет необходимости преобразовывать их в даты.

Вы можете объединить, просто используя синтаксис распространения ..., и сортировать, используя < и >, например,

let arrA = [
    {"add_date": "2019-01-07 01:35:25"},
    {"add_date": "2019-06-25 20:39:44"},
    {"add_date": "2019-07-01 09:56:10"},
    {"add_date": "2019-09-06 16:57:09"},
    {"add_date": "2019-10-10 18:13:17"}
];

let arrB = [
    {"add_date": "2019-01-22 01:35:25"},
    {"add_date": "2019-08-02 20:24:57"},
    {"add_date": "2019-10-04 14:48:55"}
]

// Merge and sort with newest date first
let arrC = [...arrA, ...arrB].sort((a, b) => a.add_date < b.add_date?  1 :
                                             a.add_date > b.add_date? -1 : 0);

console.log(arrC);

Обратите внимание, что это не копирует объекты, элементы arrC являются ссылками на те же объекты, которые находятся в arrA и arrB .

Если вы хотите преобразовать строку типа «2019-06-25 20:39:44» в Date, не используйте встроенный анализатор. Используйте простую функцию синтаксического анализа или библиотеку, так как это не формат, поддерживаемый ECMA-262, поэтому синтаксический анализ зависит от реализации, и хотя бы один общий браузер вернет недопустимую дату.

0 голосов
/ 11 октября 2019

Вы назвали свой массив массивов? И метод сортировки, который вы вставляете, есть свойство с именем date. Ваш объект имеет свойство "add_date". Измените метод сортировки массива на что-то вроде этого:

const a = [
    {
        "type": "Sipari\u015f - # PKXLF1",
        "note": "",
        "add_date": "2019-01-07 01:35:25",
        "value": 448.4
    },
    {
        "type": "Sipari\u015f - # PTO3U8",
        "note": "",
        "add_date": "2019-06-25 20:39:44",
        "value": 472
    },
    {
        "type": "Sipari\u015f - # PTYE1M",
        "note": "",
        "add_date": "2019-07-01 09:56:10",
        "value": 1320.77
    },
    {
        "type": "Sipari\u015f - # PXF079",
        "note": "",
        "add_date": "2019-09-06 16:57:09",
        "value": 1859.68
    },
    {
        "type": "Sipari\u015f - # PZ62E5",
        "note": "",
        "add_date": "2019-10-10 18:13:17",
        "value": 755.2
    }
];

const b = [
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-01-22 01:35:25",
        "value": 448.4
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-08-02 20:24:57",
        "value": 1000
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-10-04 14:48:55",
        "value": 792
    }
];
const c = [...a, ...b];


c.sort(function(a,b){
  // Turn your strings into dates, and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(a.add_date) - new Date(b.add_date);
});

console.log(c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...