从_.map()返回唯一值

问题描述 投票:1回答:1

我使用下划线的groupBy对数据集合进行了分组,但是当我映射分组的数据时,我得到重复:

var data = [];
for (var i = 1; i < (allTextLines.length - 1); i++){
    var obj = {};
    var allTextLine = allTextLines[i].split(',');
    obj["date"] = allTextLine[headerColumnIndexMap[requiredHeaders[1]]];
    obj["servingTime"] = allTextLine[headerColumnIndexMap[requiredHeaders[2]]];
    obj["replacement"] = allTextLine[headerColumnIndexMap[requiredHeaders[3]]];
    obj["fullname"] = allTextLine[headerColumnIndexMap[requiredHeaders[4]]];
    obj["center"] = allTextLine[headerColumnIndexMap[requiredHeaders[5]]];
    obj["products"] = allTextLine[headerColumnIndexMap[requiredHeaders[6]]];


    data.push(obj);

}


var groups = _.groupBy(data, function(v){
                    return [v.date, v.servingTime, v.replacement];
                });

var grouped = _.map(groups, function(group){
                    return {
                        date : group[0].date,
                        servingTime : group[0].servingTime,
                        replacement : group[0].replacement,
                        children: _.map(group, function(f){
                            return [f.fullname, f.center];
                        }),
                        products: _.map(group, 'products'),
                        units : _.map(group, 'fullname').length

                    };
                });

问题是如何从儿童和产品的结果中删除重复项?我试过链接并使用.unique()。value(),但它没有工作......

var grouped = _.map(groups, function(group){
                    return {
                        date : group[0].date,
                        servingTime : group[0].servingTime,
                        replacement : group[0].replacement,
                        children: _.chain(group).map(group, function(f){
                            return [f.fullname, f.center];
                        }).uniq().value(),
                        products: _.map(group, 'products'),
                        units : _.map(group, 'fullname').length

                    };
                });

以下是调试器中显示的结果:

enter image description here

javascript underscore.js
1个回答
1
投票

你可以使用一个简单的Set - 它不允许重复:

products: Array.from(new Set(_.map(group, "products"))),

了解更多关于Set here的信息。

或者,在filter的末尾添加一个_.map

products: _.map(groups, "products").filter((e, i, a) => a.indexOf(e) == i),
© www.soinside.com 2019 - 2024. All rights reserved.