JS 统计数组对象中多个属性值相同的个数

新手上路,请多包涵

var relationCase = [

          {
            relationId: "1f72675b-2d63-4815-a918-c219d623fb83",
            relation_applicationCode: "S-00005001-0001",
            relation: "1",
            fraudStrtus: "NEW",
            esRule: [],
                                                      
            broadcastUrl: "http://10.10.39.61/fac/api/anayzeCase/update",
            color: "#efef2ff2",
            tenantID: "novaB"
          },{
            relationId: "80b8269d-1a4f-444b-afa9-e5e5f128d6db",
            relation_applicationCode: "S-00005001-0001003",
            relation: "1",
            fraudStrtus: "NEW",
            esRule: [
              
            ],
            broadcastUrl: "http://10.10.39.61/fac/api/anayzeCase/update",
            color: "#95ff95",
            tenantID: "novaB"
          },{
           relationId: "feafe8fd-71434b80a2a",
            relation_applicationCode: "S-1223340",
            relation: "3",
            fraudStrtus: "FRAUD",
            esRule: [
              
            ],
            broadcastUrl: "http://10.10.39.61/fac/api/anayzeCase/update",
            color: "#95ff95",
            tenantID: "BankA"
          }
        ];
        
        
        
        如果对象彼此的属性relation和fraudStrtus都相同,则统计有多个重复
阅读 10.8k
2 个回答

本质上这是个 数组元素分组 的问题,请参考实现一下 groupBy 这个函数

可以参考这里的 groupBy 实现,如果你了解 TypeScript,也可以查看 TS 源码(其实不了解也能看个七七八八,毕竟只是加了类型而已)

const map = groupBy(arr, ({relation, fraudStrtus}) => relation + fraudStrtus)
// map 中即包含按照标识 relation + fraudStrtus 分离好的不同的二维数组
附: 吾辈强烈建议楼主自己实现一个/一些通用的数组操作函数库,而不是仅仅用在这个例子上写死获取某些属性作为标识
function group(arr) {
    var obj = {};
    if (Array.isArray(arr)) {
        for (var i = 0; i < arr.length; ++i) {
            var relation = arr[i].relation;
            if (relation in obj) obj[relation].push(arr[i]);
            else obj[relation] = [arr[i]];
        }
    }
    return obj;
}

function max(obj) {
    var ret = 0;
    if (obj && typeof obj === "object") {
        for (var key in obj) {
            var length = obj[key].length;
            if (length > ret) ret = length;
        }
    }
    return ret;
}

console.log(max(group(relationCase)));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题