javascript - باستخدام lodash .groupBy. كيف تضيف مفاتيحك الخاصة للمخرجات المجمعة؟




4 Answers

أليس هذا بهذه البساطة؟

var result = _(data)
            .groupBy(x => x.color)
            .map((value, key) => ({color: key, users: value}))
            .value();
javascript sorting underscore.js grouping lodash

لدي بيانات النموذج هذه التي تم إرجاعها من واجهة برمجة التطبيقات.

أنا أستخدم Lodg's _.groupBy لتحويل البيانات إلى كائن يمكنني استخدامه بشكل أفضل. البيانات الأولية التي يتم إرجاعها هي:

[
    {
        "name": "jim",
        "color": "blue",
        "age": "22"
    },
    {
        "name": "Sam",
        "color": "blue",
        "age": "33"
    },
    {
        "name": "eddie",
        "color": "green",
        "age": "77"
    }
]

أريد أن _.groupBy الدالة _.groupBy بإرجاع كائن يبدو كالتالي:

[
    {
        color: "blue",
        users: [
            {
                "name": "jim",
                "color": "blue",
                "age": "22"
            },
            {
                "name": "Sam",
                "color": "blue",
                "age": "33"
            }
        ]
    },
    {
        color: "green",
        users: [
            {
                "name": "eddie",
                "color": "green",
                "age": "77"
            }
        ]
    }
]

حاليا أنا أستخدم

_.groupBy(a, function(b) { return b.color})

الذي يعود هذا.

{blue: [{..}], green: [{...}]}

المجموعات صحيحة ، لكنني أود فعلاً إضافة المفاتيح التي أريدها ( color ، users ). هل هذا ممكن باستخدام _.groupBy ؟ أو بعض المرافق الأخرى LoDash ؟




شكرا thefourtheye ، ساعد رمزك إلى حد كبير. أنا خلقت وظيفة عامة من الحل الخاص بك باستخدام الإصدار 4.5.0 من Lodash.

function groupBy(dataToGroupOn, fieldNameToGroupOn, fieldNameForGroupName, fieldNameForChildren) {
            var result = _.chain(dataToGroupOn)
             .groupBy(fieldNameToGroupOn)
             .toPairs()
             .map(function (currentItem) {
                 return _.zipObject([fieldNameForGroupName, fieldNameForChildren], currentItem);
             })
             .value();
            return result;
        }

لتستخدمها:

var result = groupBy(data, 'color', 'colorId', 'users');

هنا هو تحديث عازف الكمان؛

https://jsfiddle.net/sc2L9dby/




هنا نسخة محدثة باستخدام lodash 4 و ES6

const result = _.chain(data)
    .groupBy("color")
    .toPairs()
    .map(pair => _.zipObject(['color', 'users'], pair))
    .value();



مثال لمجموعة و مجموع العمود باستخدام Lodash 4.17.4

   var data = [{
                "name": "jim",
                "color": "blue",
                "amount": 22
                }, {
                "name": "Sam",
                "color": "blue",
                "amount": 33
                }, {
               "name": "eddie",
               "color": "green",
               "amount": 77
              }];

      var result = _(data)
                   .groupBy(x => x.color)
                   .map((value, key) => 
                   ({color: key,
                    totalamount: _.sumBy(value,'amount'),
                    users: value})).value();

                    console.log(result);





Related