मैं महीने के हिसाब से एक सरणी को समूहबद्ध करने या फिर से व्यवस्थित करने के लिए एक शानदार तरीका ढूंढ रहा हूं और फिर समूह नेस्टेड दिनों को भी।

से उदाहरण:

[
  {
    "_id": "59d34fabe0a967636c7642f2",
    "date": "2017-02-12",
    "isActive": true
  },
  {
    "_id": "59d34fab9d1a05ca06ef9775",
    "date": "2017-02-12",
    "isActive": true
  },
  {
    "_id": "59d34fab4d49dc45357ab3a5",
    "date": "2017-02-16",
    "isActive": true
  },
  {
    "_id": "59d34fab5aa903089e1f9a44",
    "date": "2017-03-21",
    "isActive": true
  }
]

उदाहरण के लिए:

{
  '2017-02': [
    {
      "day": "2017-02-12",
      "content": [
        {
          "_id": "59d34fabe0a967636c7642f2",
          "date": "2017-02-12",
          "isActive": true
        },
        {
          "_id": "59d34fab9d1a05ca06ef9775",
          "date": "2017-02-12",
          "isActive": true
        }
    },
    {
      "day": "2017-02-16",
      "content": [
        {
          "_id": "59d34fabe0a967636c7642f2",
          "date": "2017-02-16",
          "isActive": true
        }
    },
  ],
  '2017-03': [
    {
      "day": "2017-03-21",
      "content": [
        {
          "_id": "59d34fabe0a967636c7642f2",
          "date": "2017-03-21",
          "isActive": true
        }
    }, 
}

सबसे पहले, मैंने groupBy का उपयोग किया: और मुझे पहला भाग मिला, लेकिन यह सुनिश्चित नहीं था कि समूह के दिनों को सुरुचिपूर्ण तरीके से कैसे प्राप्त किया जाए:

groupBy(array, (item) => {
  return item.date.substring(0,7);
};

अब ग्रुप डे कैसे होंगे? अग्रिम में धन्यवाद।

2
nerijusgood 3 अक्टूबर 2017, 12:27

3 जवाब

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

आप महीने और दिन के आधार पर समूहबद्ध करने के लिए नेस्टेड हैश टेबल ले सकते हैं।

var data = [{ _id: "59d34fabe0a967636c7642f2", date: "2017-02-12", isActive: true }, { _id: "59d34fab9d1a05ca06ef9775", date: "2017-02-12", isActive: true }, { _id: "59d34fab4d49dc45357ab3a5", date: "2017-02-16", isActive: true }, { _id: "59d34fab5aa903089e1f9a44", date: "2017-03-21", isActive: true }],
    result = {},
    hash = Object.create(null);

data.forEach(function (o) {
    var month = o.date.slice(0, 7),
        day = o.date.slice(-2);

    if (!hash[month]) {
        hash[month] = { _: [] };
        result[month] = hash[month]._;
    }
    if (!hash[month][day]) {
        hash[month][day] = [];
        result[month].push({ day: o.date, content: hash[month][day] });
    }
    hash[month][day].push(o);
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
3
Nina Scholz 3 अक्टूबर 2017, 12:50

मैं इसे दूसरे तरीके से करने का सुझाव दूंगा: पहला समूह दिनों के अनुसार और फिर महीनों तक:

var array = [{ _id: "59d34fabe0a967636c7642f2", date: "2017-02-12", isActive: true }, { _id: "59d34fab9d1a05ca06ef9775", date: "2017-02-12", isActive: true }, { _id: "59d34fab4d49dc45357ab3a5", date: "2017-02-16", isActive: true }, { _id: "59d34fab5aa903089e1f9a44", date: "2017-03-21", isActive: true }];

result = _(array)
    .groupBy('date')
    .map((content, day) => ( {day, content} ))
    .groupBy($ => $.day.slice(0, 7))
    .value();


console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
1
georg 3 अक्टूबर 2017, 12:47

आप इसे अपडेट, प्रत्येक के लिए और groupBy तरीके:

var arr=[
  {
    "_id": "59d34fabe0a967636c7642f2",
    "date": "2017-02-12",
    "isActive": true
  },
  {
    "_id": "59d34fab9d1a05ca06ef9775",
    "date": "2017-02-12",
    "isActive": true
  },
  {
    "_id": "59d34fab4d49dc45357ab3a5",
    "date": "2017-02-16",
    "isActive": true
  },
  {
    "_id": "59d34fab5aa903089e1f9a44",
    "date": "2017-03-21",
    "isActive": true
  }
]

var groupResult = _.groupBy(arr, item => {
	return item.date.split('-').splice(0,2).join('-')
});

_.forEach(
  groupResult,
  (dates, key) => _.update(
    groupResult,
    key,
    datesArray => _.groupBy(datesArray, item => item.date)
  )
);

console.log('groupResult ==> ', groupResult);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
1
Mikhail Shabrikov 3 अक्टूबर 2017, 13:20