Функция сортировки не работает должным образом - PullRequest
1 голос
/ 28 марта 2019

У меня есть следующий массив результатов в переменной contactArray. Здесь мне нужно отсортировать следующие записи по LastModifiedDate конкретной записи.

Во внешнем интерфейсе у меня есть 3 записи, и в первый раз я выбираю только одну запись, выполняю некоторые манипуляции с внутренним интерфейсом и снова показываю внешнему интерфейсу в порядке Asc.

(3) [{…}, {…}, {…}]
    0: {Id: "0034E00000nNLPfQAO", Name: "Test Contact 1"}
    1: {Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    2: {Id: "0034E00000nP8VuQAK", Name: "Test Contact 3"}

используя приведенный ниже фрагмент кода, sortedArray был похож на ниже,

(3) [{…}, {…}, {…}]
    0: {Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    1: {Id: "0034E00000nNLPfQAO", Name: "Test Contact 1"}
    2: {Id: "0034E00000nP8VuQAK", Name: "Test Contact 3"}

Вторая попытка выбрать другую запись отмены выбора из внешнего интерфейса,

(3) [{…}, {…}, {…}]
    0: {Id: "0034E00000nNLPfQAO", Name: "Test Contact 1", LastModifiedDate: "2019-03-28T09:59:13.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    1: {Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    2: {Id: "0034E00000nP8VuQAK", Name: "Test Contact 3"}

и отсортированный массив был как показано ниже,

(3) [{…}, {…}, {…}]
    0: {Id: "0034E00000nNLPfQAO", Name: "Test Contact 1", LastModifiedDate: "2019-03-28T09:59:13.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    1: {Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined}
    2: {Id: "0034E00000nP8VuQAK", Name: "Test Contact 3"} 

Ниже приведен фрагмент кода, который я использовал для сортировки массива,

var sortedContactArray = contactArray.sort(function(obj1, obj2) {
var tc1RefUndefined = obj1.LastModifiedDate == null ? 1 : 0;
var tc2RefUndefined = obj2.LastModifiedDate == null ? 1 : 0;

if (tc1RefUndefined || tc2RefUndefined) {
    return new Date(tc1RefUndefined) - new Date(tc2RefUndefined);
    }
});

Я что-то пропустил?

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете переместить элементы без свойства LastModifiedDate (или любого значения falsy ) в низ, а затем отсортировать дату ISO 8601 по строке.

var array = [{ Id: "0034E00000nNLPfQAO", Name: "Test Contact 1", LastModifiedDate: "2019-03-28T09:59:13.000Z", Status__c: "Pending", Status_Reason__c: undefined }, { Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined }, { Id: "0034E00000nP8VuQAK", Name: "Test Contact 3" }];

array.sort(({ LastModifiedDate: a }, { LastModifiedDate: b }) =>
     !a - !b || (a || '').localeCompare(b || ''));

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 28 марта 2019

Просто удалите троичную функцию в ваших условиях сортировки и напрямую используйте LastModifiedDate для сравнения.

var x = [{Id: "0034E00000nNLPfQAO", Name: "Test Contact 1", LastModifiedDate: "2019-03-28T09:59:13.000Z", Status__c: "Pending", Status_Reason__c: undefined},{Id: "0034E00000nNLTbQAO", Name: "Test Contact 2", LastModifiedDate: "2019-03-28T09:53:00.000Z", Status__c: "Pending", Status_Reason__c: undefined},{Id: "0034E00000nP8VuQAK", Name: "Test Contact 3"}];

var y = x.sort(function(obj1, obj2) {
var tc1RefUndefined = obj1.LastModifiedDate;   //<-- remove ternary
var tc2RefUndefined = obj2.LastModifiedDate;   //<-- remove ternary

if (tc1RefUndefined || tc2RefUndefined) {
    return new Date(tc1RefUndefined) - new Date(tc2RefUndefined);
    }
});

console.log(y)

Причина, по которой ваш код не работает, заключается в том, что когда в вашем объекте присутствует "LastModifiedDate", вы назначаете 1 локальной переменной.

Так, когда вы запускаете функцию сортировки для contactArray[0] and contactArray[1]

var tc1RefUndefined = 0;//(result of ternary condition)
var tc2RefUndefined = 0;//(result of ternary condition)

if (tc1RefUndefined || tc2RefUndefined) { //this will not run due to false
    return new Date(tc1RefUndefined) - new Date(tc2RefUndefined);
    }
})
//so your array remain unaffected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...