मेरे पास एक सूची है जिसे मुझे dueDate और स्थिति (अपूर्ण => पूर्ण) के आधार पर क्रमबद्ध करने की आवश्यकता है। अपूर्ण कार्य नियत दिनांक तक एएससी क्रम में होने चाहिए। फिर पूरे किए गए कार्य अधूरे कार्यों के बाद आने चाहिए और वे भी dueDate तक एएससी क्रम में होने चाहिए।

unsorted array 
[{"task":"Dishes", "isComplete":false, "dueDate":"2021-01-01T15:45:00.000Z"},{"task":"feed baby", "isComplete":true, "dueDate":"2021-01-02T15:45:00.000Z"},{"task":"Laundry", "isComplete":true, "dueDate":"2021-01-04T15:45:00.000Z"},{"task":"Homework", "isComplete":false, "dueDate":"2021-01-03T15:45:00.000Z"}]

sorted array
    [
    {
    "task":"Dishes",
    "isComplete":false,
    "dueDate":"2021-01-01T15:45:00.000Z"
    },
    {
    "task":"Homework",
    "isComplete":false,
    "dueDate":"2021-01-03T15:45:00.000Z"
    }
    {
    "task":"feed baby",
    "isComplete":true,
    "dueDate":"2021-01-02T15:45:00.000Z"
    },
    {
    "task":"Laundry",
    "isComplete":true,
    "dueDate":"2021-01-04T15:45:00.000Z"
    },
    ]

यहाँ 2 प्रकार के कार्यों का उपयोग करते हुए मेरा दृष्टिकोण है, पहले तिथि के अनुसार फिर स्थिति के अनुसार लेकिन मुझे लगता है कि इसे और कम किया जा सकता है:

const sortByDate = (a,b) => {
    if (new Date(a.dueDate) < new Date(b.dueDate)){
        return -1;
    }
    if (new Date(a.dueDate) > new Date(b.dueDate)) {
        return 1;
    }
    return 0;
}
const sortByStatus = (a,b) => {
    if (a.isComplete < b.isComplete){
        return -1;
    }
    if (a.isComplete > b.isComplete) {
        return 1;
    }
    return 0;
}
1
JohnJones357 10 जुलाई 2021, 19:37

3 जवाब

सबसे बढ़िया उत्तर

आप घटाव की जबरदस्ती संपत्ति और तार्किक OR ऑपरेटर का उपयोग कर सकते हैं।

const arr = [{"task":"Dishes", "isComplete":false, "dueDate":"2021-01-01T15:45:00.000Z"},{"task":"feed baby", "isComplete":true, "dueDate":"2021-01-02T15:45:00.000Z"},{"task":"Laundry", "isComplete":true, "dueDate":"2021-01-04T15:45:00.000Z"},{"task":"Homework", "isComplete":false, "dueDate":"2021-01-03T15:45:00.000Z"}];
arr.sort((a,b) => a.isComplete - b.isComplete || new Date(a.dueDate) - new Date(b.dueDate));
console.log(arr);
2
Unmitigated 10 जुलाई 2021, 16:48

यदि आप एक संयुक्त सॉर्ट फ़ंक्शन के लिए कह रहे हैं। फिर यह काम करना चाहिए

const sortArray = (a,b) => {
    if (new Date(a.dueDate) < new Date(b.dueDate)){
        return -1;
    }
    else if (new Date(a.dueDate) > new Date(b.dueDate)) {
        return 1;
    }
    else {  // This else means, due date is same, and we need to consider the status in this case
        if (b.isComplete){
            return 1;
        }
        else if (a.isComplete) {
            return -1;
        }
        return 0; // This means status and due date are equal
    }
};

पहले यह नियत तारीख के अनुसार छांटेगा। यदि नियत तिथियां समान हैं, तो ऐसे तत्वों की स्थिति पर विचार किया जाएगा।

1
Klaus 10 जुलाई 2021, 16:46
array.sort((a, b) => {
  return sortByStatus(a,b) || sortByDate(a, b);
});

अधिक वर्णनात्मक

array.sort((a, b) => {
  const byStatus = sortByStatus(a, b)
  // if status isn't same, compare by status
  if( byStatus !== 0 ) return byStatus;
  // else compare by date
  return sortByDate(a,b);
});
1
Avinash Thakur 10 जुलाई 2021, 16:48