使用d3或jquery的json对象中有多少不同的密钥对值

how many different key pair values in a json object using d3 or jquery

本文关键字:多少 密钥对 对象 d3 jquery json 使用      更新时间:2023-09-26

我有一个对象数组,看起来有点像这个

 [ {
      "created_date" : "2013-08-12T06:25:00",
      "descriptor" : "Noise, Barking Dog (NR5)"
    },
    {
      "created_date" : "2013-08-17T06:25:00",
      "descriptor" : "Noise, Barking Dog (NR5)"
    },
    {
      "created_date" : "2013-08-17T02:25:00",
      "descriptor" : "Noise, Barking Dog (NR5)"
    },
    {
      "created_date" : "2013-08-12T06:25:00",
      "descriptor" : "Loud Music"
    },
    {
      "created_date" : "2013-08-17T06:25:00",
      "descriptor" : "Loud Music"
    },
    {
      "created_date" : "2013-08-17T02:25:00",
      "descriptor" : "Construction Noise"
    },
    {
      "created_date" : "2013-08-17T02:25:00",
      "descriptor" : "Construction Noise"
    }]

问题是我如何计算有多少"描述符"类别及其名称我应该如何使用D3或jquery来处理这个问题。基本上,这个想法是形成不同的组

您可以使用d3的d3.map()将每个descriptor映射到其出现次数。

var map = d3.map();
data.forEach(function(d) {
    var descriptorCount = map.get(d.descriptor);
    map.set(d.descriptor, descriptorCount === undefined ? 1 : ++descriptorCount);
});
console.log(map); // {Noise, Barking Dog (NR5): 3, Loud Music: 2, Construction Noise: 2}

Fiddle

var UniqueDescriptors = "";
for (var i =0; i<array.length;i++) {
    var obj = array[i];
    if (obj.descriptor && UniqueDescriptors.indexOf(obj.descriptor) == -1) {
        UniqueDescriptors += obj.descriptor + '|';
    }
}
// this returns just the number
//return (UniqueDescriptors.split('|').length - 1);
// this returns an array of the different descriptors if you need the names. you also can count the number by accessing the length property
return UniqueDescriptors.split('|').pop();

当然,这个脚本的明显缺陷是它假定描述符值中没有管道。

只需迭代数组并收集每个描述符:

var descriptors = (function(data) {
    var seen = {};
    data.forEach(function(obj) {
        seen[obj.descriptor] = true;
    });
    return Object.keys(seen);
}(data));

要获得唯一描述符的数量,只需获取数组的长度:

descriptors.length

如果您需要支持不支持Object.keysArray#forEach:的旧浏览器

var descriptors = (function(data) {
    var seen = {};
    var descriptors = [];
    for (var i = 0, l = data.length; i < l; i++) {
        var descriptor = data[i].descriptor;
        if (!seen[descriptor]) {
            descriptors.push(descriptor);
            seen[descriptor] = true;
        }
    }
    return descriptors;
}(data));