তারিখের মান সহ একক কী দ্বারা অবজেক্টগুলির অ্যারে বাছাই করুন


257

আমার কাছে বেশ কয়েকটি কী মান জোড়ের সাথে অবজেক্টগুলির একটি অ্যারে রয়েছে এবং আমি তাদের 'আপডেট_এট'-এর ভিত্তিতে বাছাই করতে পারি:

[
    {
        "updated_at" : "2012-01-01T06:25:24Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-09T11:25:13Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-05T04:13:24Z",
        "foo" : "bar"
    }
]

এটি করার সবচেয়ে দক্ষ উপায় কি?


@ টোপনার এই লিঙ্কটি দেখে মনে হচ্ছে এটি পিএইচপি সম্পর্কে কোনও প্রশ্ন
ডেভিড ব্রেনার

আমার ভুল .. এটি সঠিকভাবে পড়েনি
রিনি পট

উত্তর:


337

আপনি ব্যবহার করতে পারেন Array.sort

এখানে একটি উদাহরণ:

var arr = [{
    "updated_at": "2012-01-01T06:25:24Z",
    "foo": "bar"
  },
  {
    "updated_at": "2012-01-09T11:25:13Z",
    "foo": "bar"
  },
  {
    "updated_at": "2012-01-05T04:13:24Z",
    "foo": "bar"
  }
]

arr.sort(function(a, b) {
  var keyA = new Date(a.updated_at),
    keyB = new Date(b.updated_at);
  // Compare the 2 dates
  if (keyA < keyB) return -1;
  if (keyA > keyB) return 1;
  return 0;
});

console.log(arr);


17
আপনি keyA - keyB(বা সম্ভবত keyB - keyA) ব্যবহার করতে পারবেন না ? তারিখের অবজেক্টগুলির একটি valueOf()পদ্ধতি রয়েছে।
soktinpk

ফিরে a। আপডেট_এট <বি। এ আপডেট ? 1: -1 আমার জন্য কাজ করে। তারিখ বিন্যাসে পার্স করার দরকার নেই।
অলিভিসিসন

a-bলম্বা কোড এড়াতে চাইলে কেবল করার ক্ষমতা সত্যিই গুরুত্বপূর্ণ। যদিও এই ক্ষেত্রে লম্বা কোডটি অগত্যা খারাপ নয় তবে আমি মনে করি যে ভার্বোসটি এটি বোঝা আরও কঠিন করে তোলে। আমি বর্তমানে ব্যবহার values.sort((a,b)=>a.attr-b.attr)। আপনার যখন অ্যারে বাছাই করা হয় তখন প্রতিটি সময় 5 টি লাইন লিখলে ক্লান্তিকর হয়ে ওঠে।
আনানফায়

এই উদাহরণটি কার্যকর নয় এবং প্রচুর অপ্রয়োজনীয় গণনা করে। বাছাই একটি বৈধ ফলাফল হিসাবে যে কোনও ধনাত্মক বা নেতিবাচক নম্বর নিতে পারে। আপনার অতিরিক্ত গণনাগুলি এটির জোর করতে 1,0, -1 প্রয়োজন হয় না এবং কেবল কার্যকরভাবে অতিরিক্ত গণনা যুক্ত করে।
প্যাট্রিক ডব্লিউ। ম্যাকমাহন

আপনাকে দুর্দান্ত কাজ করে
অ্যান্ডি

158

আমি ইতিমধ্যে এখানে একটি অনুরূপ প্রশ্নের উত্তর দিয়েছি: অবজেক্টগুলির একটি অ্যারে বাছাই করার সহজ ফাংশন

এই প্রশ্নের জন্য আমি এই সামান্য ফাংশনটি তৈরি করেছি যা আপনি যা চান তা করতে পারে:

function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}

11
আপনি স্যার, লোকটি। blogs.citypages.com/blotter/assets_c/2009/02/...
ডোম

2
আপনি কিভাবে এই বিপরীত হবে?

4
এটিকে কেস-সংবেদনশীল করার জন্য, আপনি x এবং y ভেরিয়েবলগুলিতে .toLowerCase () যুক্ত করতে পারেন
জ্যাকব ভ্যান লিনজেন

4
এগুলির মতো বাছাইয়ের ক্রিয়াকলাপগুলি বিপরীত করতে, কেবল ফলাফল দ্বারা গুণ করুন -1:)
Svish

5
বা শুধু আউটপুট নিতে এবং array = array.reverse()ফাংশন ব্যবহার করুন ।
লুক স্টিভেনসন

31

Array.sort () পদ্ধতি জায়গায় একটি অ্যারের উপাদান বাছাই করে এবং অ্যারে ফেরৎ। থেকে সতর্ক থাকুন ) Array.sort ( এটা না যেমন অপরিবর্তনীয় । অপরিবর্তনীয় বাছাইয়ের জন্য অপরিবর্তনীয় বাছাই করুন

এই পদ্ধতিটি হ'ল আপনার বর্তমান updated_atআইএসও ফর্ম্যাটে ব্যবহার করে অ্যারেটিকে সাজানো । আমরা new Data(iso_string).getTime()আইএসও সময়কে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করতে ব্যবহার করি । একটি ইউনিক্স টাইমস্ট্যাম্প এমন একটি সংখ্যা যা আমরা সহজ গণিত করতে পারি। আমরা ফলাফলটি প্রথম এবং দ্বিতীয় টাইমস্ট্যাম্প বিয়োগ করি; প্রথম টাইমস্ট্যাম্প যদি দ্বিতীয়টির চেয়ে বড় হয় তবে রিটার্নের সংখ্যাটি ইতিবাচক হবে। দ্বিতীয় সংখ্যাটি প্রথমের চেয়ে বড় হলে রিটার্নের মানটি নেতিবাচক হবে। দু'টি একই হলে রিটার্ন শূন্য হবে। ইনলাইন ফাংশনের জন্য প্রয়োজনীয় রিটার্ন মানগুলির সাথে এটি পুরোপুরি alines।

জন্য ES6 :

arr.sort((a,b) => new Date(a.updated_at).getTime() - new Date(b.updated_at).getTime());

জন্য ES5 :

arr.sort(function(a,b){ 
 return new Date(a.updated_at).getTime() - new Date(b.updated_at).getTime();
});

আপনি যদি updated_atইউনিক্স টাইমস্ট্যাম্পগুলিতে রূপান্তর করেন তবে আপনি এটি করতে পারেন:

জন্য ES6 :

arr.sort((a,b) => a.updated_at - b.updated_at);

জন্য ES5 :

arr.sort(function(a,b){ 
 return a.updated_at - b.updated_at;
});

এই পোস্টের সময়ে, আধুনিক ব্রাউজারগুলি ES6 সমর্থন করে না। আধুনিক ব্রাউজারে ব্যবহারে ES6 ব্যবহার করার জন্য Babel ES5 কোড transpile করতে। অদূর ভবিষ্যতে ES6 এর জন্য ব্রাউজারের সমর্থন আশা করুন।

অ্যারে.সোর্ট () এর 3 টি সম্ভাব্য ফলাফলের মধ্যে একটির ফেরতের মানটি গ্রহণ করা উচিত:

  • একটি ধনাত্মক সংখ্যা (প্রথম আইটেম> দ্বিতীয় আইটেম)
  • একটি নেতিবাচক সংখ্যা (প্রথম আইটেম <দ্বিতীয় আইটেম)
  • 0 দুটি আইটেম সমান হলে

নোট করুন যে ইনলাইন ফাংশনে রিটার্ন মান কোনও ধনাত্মক বা নেতিবাচক সংখ্যা হতে পারে। অ্যারে.সোর্ট () রিটার্ন নম্বর কী তা বিবেচনা করে না। এটি কেবলমাত্র যদি ফেরতের মানটি ধনাত্মক, নেতিবাচক বা শূন্য হয় তবে তা যত্নশীল হয়।

অপরিবর্তনীয় বাছাইয়ের জন্য: (উদাহরণ ES6 এ)

const sort = require('immutable-sort');
const array = [1, 5, 2, 4, 3];
const sortedArray = sort(array);

আপনি এটি এইভাবে লিখতে পারেন:

import sort from 'immutable-sort';
const array = [1, 5, 2, 4, 3];
const sortedArray = sort(array);

আপনি যে আমদানিটি দেখছেন তা ES6 এ জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করার একটি নতুন উপায় এবং আপনার কোডটি খুব পরিষ্কার দেখায়। আমার ব্যক্তিগত প্রিয়।

অপরিবর্তনীয় বাছাই উত্স অ্যারে পরিবর্তন না করে এটি একটি নতুন অ্যারে প্রদান করে returns constঅপরিবর্তনীয় ডেটা ব্যবহার করার পরামর্শ দেওয়া হয়।


19

এখানে @ ডেভিড ব্রেইনার-ব্যাংকারদের উত্তরটির সামান্য পরিবর্তিত সংস্করণ দেওয়া হয়েছে যা বর্ণ অনুসারে অক্ষর অনুসারে বা সংখ্যায় সংখ্যা অনুসারে বাছাই করে এবং এটি নিশ্চিত করে যে বড় হাতের অক্ষর দিয়ে শুরু হওয়া শব্দগুলি ছোট হাতের অক্ষর দিয়ে শুরু হওয়া শব্দের উপরের বাছাই করে না (যেমন "অ্যাপল, আর্লি") যে ক্রমে প্রদর্শিত হবে)।

function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key];
        var y = b[key];

        if (typeof x == "string")
        {
            x = (""+x).toLowerCase(); 
        }
        if (typeof y == "string")
        {
            y = (""+y).toLowerCase();
        }

        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}

3
প্রস্তাবিত সমাধানটি একটি [কী] এবং খ [কী] উভয় স্ট্রিং না হলে একটি ত্রুটি দিতে পারে। আমি y y.toLowerCase () Y সঙ্গে = ( "" + Y) = প্রতিস্থাপন .toLowerCase সুপারিশ ()
user8074

বাছাই কোনও ধনাত্মক বা নেতিবাচক নম্বরকে বৈধ রিটার্ন হিসাবে গ্রহণ করতে পারে। এটির জোর করতে আপনার অতিরিক্ত গণনা 1,0, -1 প্রয়োজন হয় না। আপনি একটি সাধারণ রিটার্ন মান জটিল। অতিরিক্ত গণনা যা কিছু না করে যুক্ত না করা ভাল।
প্যাট্রিক ডব্লিউ। ম্যাকমাহন

15

আন্ডারস্কোর জেএস বা লোডাশ ব্যবহার করুন,

var arrObj = [
    {
        "updated_at" : "2012-01-01T06:25:24Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-09T11:25:13Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-05T04:13:24Z",
        "foo" : "bar"
    }
];

arrObj = _.sortBy(arrObj,"updated_at");

_.sortBy() একটি নতুন অ্যারে প্রদান করে

পড়ুন http://underscorejs.org/#sortBy এবং lodash ডক্স https://lodash.com/docs#sortBy


6

ES2015 সমর্থন করে এটি করা যায়:

foo.sort((a, b) => a.updated_at < b.updated_at ? -1 : 1)

1
<সাথে - এবং সরান 'প্রতিস্থাপন করা হলে ইনলাইনটির কোনও প্রয়োজন নেই? -1: 1 "আপনাকে অবশ্যই একটি বৈধ আগমন এই উদাহরণটিতে প্যাচসমূহ আইটেম সমান হতে পারে সমান আইটেম একটি 0 ফেরত পাঠানো উচিত পাবেন এবং তাই অপ্রত্যাশিত ফলাফল দিতে
প্যাট্রিক ডব্লিউ ম্যাকমাহন

জন্য ব্যাখ্যা ধন্যবাদ
knowbody

আপডেট_এটি কোনও আইএসও সময় হলে এটি কাজ করবে না। এই উদাহরণটি ইউনিক্স টাইমস্ট্যাম্পগুলি ধরে নিয়েছে তবে ওপি আইএসও ফর্ম্যাটে থাকা ডেটা পোস্ট করেছে। সুতরাং তুলনা করার জন্য আপনাকে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করতে হবে। এটি করা যেতে পারে এটি new Date(iso_str).getTime()একটি ইউনিক্স টাইমস্ট্যাম্পকে ফিরিয়ে দেবে।
প্যাট্রিক ডব্লিউ। ম্যাকমাহন

5

ডেটা আমদানি করা

[
    {
        "gameStatus": "1",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 11:32:04"
    },
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:08:24"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:35:40"
    },
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 10:42:53"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 10:54:09"
    },
    {
        "gameStatus": "0",
        "userId": "1a2fefb0-5ae2-47eb-82ff-d1b2cc27875a",
        "created_at": "2018-12-19 18:46:22"
    },
    {
        "gameStatus": "1",
        "userId": "7118ed61-d8d9-4098-a81b-484158806d21",
        "created_at": "2018-12-20 10:50:48"
    }
]

আরোহী অর্ডার জন্য

arr.sort(function(a, b){
    var keyA = new Date(a.updated_at),
        keyB = new Date(b.updated_at);
    // Compare the 2 dates
    if(keyA < keyB) return -1;
    if(keyA > keyB) return 1;
    return 0;
});

Asc অর্ডার উদাহরণ

[
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 10:42:53"
    },
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:08:24"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:35:40"
    },
    {
        "gameStatus": "0",
        "userId": "1a2fefb0-5ae2-47eb-82ff-d1b2cc27875a",
        "created_at": "2018-12-19 18:46:22"
    },
    {
        "gameStatus": "1",
        "userId": "7118ed61-d8d9-4098-a81b-484158806d21",
        "created_at": "2018-12-20 10:50:48"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 10:54:09"
    },
    {
        "gameStatus": "1",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 11:32:04"
    }
]

অবতরণ অর্ডার জন্য

arr.sort(function(a, b){
    var keyA = new Date(a.updated_at),
        keyB = new Date(b.updated_at);
    // Compare the 2 dates
    if(keyA > keyB) return -1;
    if(keyA < keyB) return 1;
    return 0;
});

ডেস্ক অর্ডার উদাহরণ

[
    {
        "gameStatus": "1",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 11:32:04"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-20 10:54:09"
    },
    {
        "gameStatus": "1",
        "userId": "7118ed61-d8d9-4098-a81b-484158806d21",
        "created_at": "2018-12-20 10:50:48"
    },
    {
        "gameStatus": "0",
        "userId": "1a2fefb0-5ae2-47eb-82ff-d1b2cc27875a",
        "created_at": "2018-12-19 18:46:22"
    },
    {
        "gameStatus": "2",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:35:40"
    },
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 18:08:24"
    },
    {
        "gameStatus": "0",
        "userId": "c02cfb18-ae66-430b-9524-67d9dd8f6a50",
        "created_at": "2018-12-19 10:42:53"
    }
]

3

এই উত্তরের বিবরণ হিসাবে , আপনি ব্যবহার করতে পারেন Array.sort

arr.sort(function(a,b){return new Date(a.updated_at) - new Date(b.updated_at)})

arr = [
    {
        "updated_at" : "2012-01-01T06:25:24Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-09T11:25:13Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-05T04:13:24Z",
        "foo" : "bar"
    }
];
arr.sort(function(a,b){return new Date(a.updated_at) - new Date(b.updated_at)});
console.log(arr);


2

আরও একটি, আরও গাণিতিক , একই জিনিস করার পদ্ধতি কিন্তু খাটো :

arr.sort(function(a, b){
    var diff = new Date(a.updated_at) - new Date(b.updated_at);
    return diff/(Math.abs(diff)||1);
});

বা চালিত ল্যাম্বদা তীর শৈলীতে:

arr.sort((a, b) => {
    var diff = new Date(a.updated_at) - new Date(b.updated_at);
    return diff/(Math.abs(diff)||1);
});

এই পদ্ধতিটি যে কোনও সংখ্যার ইনপুট দিয়ে করা যেতে পারে


অপ্রকাশিত উত্তর
two7s_clash

2

আজকের হিসাবে, @ জবাবদিহির উত্তর ( https://stackoverflow.com/a/42418963/6778546 ) এবং @ রকেট হাজম্যাট ( https://stackoverflow.com/a/8837511/6778546 ) ES2015 সমর্থন সরবরাহের জন্য একত্রিত করা যেতে পারে এবং সঠিক তারিখ পরিচালনা:

arr.sort((a, b) => {
   const dateA = new Date(a.updated_at);
   const dateB = new Date(b.updated_at);
   return dateA - dateB;
});

2

আমি টাইপস্ক্রিপ্টে একটি বাছাইয়ের ফাংশন তৈরি করেছি যা আমরা বস্তুর অ্যারেতে স্ট্রিং, তারিখ এবং সংখ্যা অনুসন্ধান করতে ব্যবহার করতে পারি। এটি একাধিক ক্ষেত্রে বাছাই করতে পারে।

export type SortType = 'string' | 'number' | 'date';
export type SortingOrder = 'asc' | 'desc';

export interface SortOptions {
  sortByKey: string;
  sortType?: SortType;
  sortingOrder?: SortingOrder;
}


class CustomSorting {
    static sortArrayOfObjects(fields: SortOptions[] = [{sortByKey: 'value', sortType: 'string', sortingOrder: 'desc'}]) {
        return (a, b) => fields
          .map((field) => {
            if (!a[field.sortByKey] || !b[field.sortByKey]) {
              return 0;
            }

            const direction = field.sortingOrder === 'asc' ? 1 : -1;

            let firstValue;
            let secondValue;

            if (field.sortType === 'string') {
              firstValue = a[field.sortByKey].toUpperCase();
              secondValue = b[field.sortByKey].toUpperCase();
            } else if (field.sortType === 'number') {
              firstValue = parseInt(a[field.sortByKey], 10);
              secondValue = parseInt(b[field.sortByKey], 10);
            } else if (field.sortType === 'date') {
              firstValue = new Date(a[field.sortByKey]);
              secondValue = new Date(b[field.sortByKey]);
            }
            return firstValue > secondValue ? direction : firstValue < secondValue ? -(direction) : 0;

          })
          .reduce((pos, neg) => pos ? pos : neg, 0);
      }
    }
}

ব্যবহার:

const sortOptions = [{
      sortByKey: 'anyKey',
      sortType: 'string',
      sortingOrder: 'asc',
    }];

arrayOfObjects.sort(CustomSorting.sortArrayOfObjects(sortOptions));

1

আইএসও বিন্যাসিত তারিখ অনুসারে বাছাই করা ব্যয়বহুল হতে পারে, যদি না আপনি ক্লায়েন্টদের সর্বশেষ এবং সেরা ব্রাউজারগুলিতে সীমাবদ্ধ রাখুন, যা তারিখ-বিশ্লেষণের মাধ্যমে তারিখ-বিশ্লেষণ করে সঠিক টাইমস্ট্যাম্প তৈরি করতে পারে।

যদি আপনি নিজের ইনপুট সম্পর্কে নিশ্চিত হন এবং আপনি জানেন যে এটি সর্বদা yyyy-mm-ddTh: মিমি: এসএস এবং জিএমটি (জেড) আপনি প্রতিটি সদস্যের থেকে অঙ্কগুলি বের করতে এবং সংখ্যার মতো তুলনা করতে পারেন

array.sort(function(a,b){
    return a.updated_at.replace(/\D+/g,'')-b.updated_at.replace(/\D+/g,'');
});

যদি তারিখটি আলাদাভাবে ফর্ম্যাট করা যায় তবে আপনার আইসো চ্যালেঞ্জযুক্ত লোকদের জন্য কিছু যুক্ত করতে হতে পারে:

Date.fromISO: function(s){
    var day, tz,
    rx=/^(\d{4}\-\d\d\-\d\d([tT ][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
    p= rx.exec(s) || [];
    if(p[1]){
        day= p[1].split(/\D/).map(function(itm){
            return parseInt(itm, 10) || 0;
        });
        day[1]-= 1;
        day= new Date(Date.UTC.apply(Date, day));
        if(!day.getDate()) return NaN;
        if(p[5]){
            tz= (parseInt(p[5], 10)*60);
            if(p[6]) tz+= parseInt(p[6], 10);
            if(p[4]== '+') tz*= -1;
            if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
        }
        return day;
    }
    return NaN;
}
if(!Array.prototype.map){
    Array.prototype.map= function(fun, scope){
        var T= this, L= T.length, A= Array(L), i= 0;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in T){
                    A[i]= fun.call(scope, T[i], i, T);
                }
                ++i;
            }
            return A;
        }
    }
}
}

2
আপনি কি শুধু ব্যবহার করতে পারবেন না Date.parse?
রকেট হাজমত

1

সম্পূর্ণতার জন্য এখানে सॉर्टবাইয়ের একটি সংক্ষিপ্ত সাধারণ জেনেরিক বাস্তবায়ন রয়েছে:

function sortBy(list, keyFunc) {
  return list.sort((a,b) => keyFunc(a) - keyFunc(b));
}

sortBy([{"key": 2}, {"key": 1}], o => o["key"])

দ্রষ্টব্য যে এটি স্থানে সাজানো অ্যারে বাছাই পদ্ধতি ব্যবহার করে। অনুলিপিটির জন্য আপনি একটি অনুলিপি তৈরি করতে arr.concat () বা arr.slice (0) বা অনুরূপ পদ্ধতি ব্যবহার করতে পারেন।


1

এটির সাহায্যে আমরা বাছাইয়ের জন্য একটি মূল ফাংশনটি পাস করতে পারি

Array.prototype.sortBy = function(key_func, reverse=false){
    return this.sort( (a, b) => {
        var keyA = key_func(a),
            keyB = key_func(b);
        if(keyA < keyB) return reverse? 1: -1;
        if(keyA > keyB) return reverse? -1: 1;
        return 0;
    }); 
}

তারপরে উদাহরণস্বরূপ যদি আমাদের থাকে

var arr = [ {date: "01/12/00", balls: {red: "a8",  blue: 10}},
            {date: "12/13/05", balls: {red: "d6" , blue: 11}},
            {date: "03/02/04", balls: {red: "c4" , blue: 15}} ]

আমরা করতে পারি

arr.sortBy(el => el.balls.red)
/* would result in
[ {date: "01/12/00", balls: {red: "a8", blue: 10}},
  {date: "03/02/04", balls: {red: "c4", blue: 15}},
  {date: "12/13/05", balls: {red: "d6", blue: 11}} ]
*/

অথবা

arr.sortBy(el => new Date(el.date), true)   // second argument to reverse it
/* would result in
[ {date: "12/13/05", balls: {red: "d6", blue:11}},
  {date: "03/02/04", balls: {red: "c4", blue:15}},
  {date: "01/12/00", balls: {red: "a8", blue:10}} ]
*/

অথবা

arr.sortBy(el => el.balls.blue + parseInt(el.balls.red[1]))
/* would result in
[ {date: "12/13/05", balls: {red: "d6", blue:11}},    // red + blue= 17
  {date: "01/12/00", balls: {red: "a8", blue:10}},    // red + blue= 18
  {date: "03/02/04", balls: {red: "c4", blue:15}} ]   // red + blue= 19
*/

1

আপনি এই সমস্যাটি সমাধান করতে লোডাশ ইউটিলিটি লাইব্রেরিটি ব্যবহার করতে পারেন (এটি বেশ দক্ষ লাইব্রেরি):

const data = [{
    "updated_at": "2012-01-01T06:25:24Z",
    "foo": "bar"
  },
  {
    "updated_at": "2012-01-09T11:25:13Z",
    "foo": "bar"
  },
  {
    "updated_at": "2012-01-05T04:13:24Z",
    "foo": "bar"
  }
]

const ordered = _.orderBy(
  data,
  function(item) {
    return item.updated_at;
  }
);

console.log(ordered)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

আপনি এখানে ডকুমেন্টেশন পেতে পারেন: https://lodash.com/docs/4.17.15#orderBy


0

আপনি একটি ক্লোজার তৈরি করতে পারেন এবং এটি এখানে পাস করতে পারেন আমার কাজ করা উদাহরণ

$.get('https://data.seattle.gov/resource/3k2p-39jp.json?$limit=10&$where=within_circle(incident_location, 47.594972, -122.331518, 1609.34)', 
  function(responce) {

    var filter = 'event_clearance_group', //sort by key group name
    data = responce; 

    var compare = function (filter) {
        return function (a,b) {
            var a = a[filter],
                b = b[filter];

            if (a < b) {
                return -1;
            } else if (a > b) {
                return 1;
            } else {
                return 0;
            }
        };
    };

    filter = compare(filter); //set filter

    console.log(data.sort(filter));
});

0
var months = [
    {
        "updated_at" : "2012-01-01T06:25:24Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-09T11:25:13Z",
        "foo" : "bar"
    },
    {
        "updated_at" : "2012-01-05T04:13:24Z",
        "foo" : "bar"
    }];
months.sort((a, b)=>{
    var keyA = new Date(a.updated_at),
        keyB = new Date(b.updated_at);
    // Compare the 2 dates
    if(keyA < keyB) return -1;
    if(keyA > keyB) return 1;
    return 0;
});
console.log(months);

0
  • ব্যবহার Array.sort()একটি অ্যারে বাছাই করতে
  • ফাংশনটি খাঁটি করতে স্প্রেড অপারেটর ( ) ব্যবহার করে ক্লোন অ্যারে
  • পছন্দসই কী অনুসারে বাছাই করুন ( updated_at)
  • তারিখের স্ট্রিংকে তারিখের অবজেক্টে রূপান্তর করুন
  • Array.sort() বর্তমান এবং পরের আইটেম থেকে দুটি বৈশিষ্ট্য বিয়োগ করে কাজ করে যদি এটি এমন একটি সংখ্যা / অবজেক্ট যার উপর আপনি rণাত্মক ক্রিয়াকলাপ সম্পাদন করতে পারেন
const input = [
  {
    updated_at: '2012-01-01T06:25:24Z',
    foo: 'bar',
  },
  {
    updated_at: '2012-01-09T11:25:13Z',
    foo: 'bar',
  },
  {
    updated_at: '2012-01-05T04:13:24Z',
    foo: 'bar',
  }
];

const sortByUpdatedAt = (items) => [...items].sort((itemA, itemB) => new Date(itemA.updated_at) - new Date(itemB.updated_at));

const output = sortByUpdatedAt(input);

console.log(input);
/*
[ { updated_at: '2012-01-01T06:25:24Z', foo: 'bar' }, 
  { updated_at: '2012-01-09T11:25:13Z', foo: 'bar' }, 
  { updated_at: '2012-01-05T04:13:24Z', foo: 'bar' } ]
*/
console.log(output)
/*
[ { updated_at: '2012-01-01T06:25:24Z', foo: 'bar' }, 
  { updated_at: '2012-01-05T04:13:24Z', foo: 'bar' }, 
  { updated_at: '2012-01-09T11:25:13Z', foo: 'bar' } ]
*/

0

আমি একই জিনিসটির মুখোমুখি, সুতরাং আমি কেন জেনেরিক দিয়ে এটি পরিচালনা করি এবং কেন আমি এর জন্য একটি ফাংশন তৈরি করি:

//example:
//array: [{name: 'idan', workerType: '3'}, {name: 'stas', workerType: '5'}, {name: 'kirill', workerType: '2'}]
//keyField: 'workerType'
// keysArray: ['4', '3', '2', '5', '6']
sortByArrayOfKeys = (array, keyField, keysArray) => {
    array.sort((a, b) => {
        const aIndex = keysArray.indexOf(a[keyField])
        const bIndex = keysArray.indexOf(b[keyField])
        if (aIndex < bIndex) return -1;
        if (aIndex > bIndex) return 1;
        return 0;
    })
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.