数组上的Javascript计数值

时间:2016-10-10 14:46:32

标签: javascript arrays json

我有一些数据,其中一个字段叫做tag,in有时会包含一个值数组。

我需要做的是计算这些值并将它们分成不同的变量。

以下是数据:

myObject = [

{
"object": [
        {
            "id": "8062",
            "name": "name 1"
            "tags": ['tag1','tag2'],
            "desc": "desc 1",
        },
        {
            "id": "8061",
            "name": "name 2"
            "tags": ['tag 2', 'tag 3'],
            "desc": "desc 2"

        },
        {
        "id": "8060",
        "name": "name 3"
        "tags": ['tag 2', 'tag 3'],
        "desc": "desc 3"

        }
    ]
}

];

这就是我最终需要的结果:

tag1_count = 1;
tag2_count = 3;
tag3_count = 2;

我该怎么做?

3 个答案:

答案 0 :(得分:1)

myObject = [{
  "object": [{
    "id": "8062",
    "name": "name 1",
    "tags": ['tag1', 'tag2'],
    "desc": "desc 1"
  }, {
    "id": "8061",
    "name": "name 2",
    "tags": ['tag2', 'tag3'],
    "desc": "desc 2"

  }, {
    "id": "8060",
    "name": "name 3",
    "tags": ['tag2', 'tag3'],
    "desc": "desc 3"

  }]
}];

var map = {};

myObject[0].object.forEach(function(object) {
  object.tags.forEach(function(tag) {
    if(map[tag] === undefined){
      map[tag] = 1;  
    }else{
      map[tag] = map[tag] + 1; 
    }
  });
});

console.log(map);

答案 1 :(得分:1)

您可以像这样使用reduce()并返回对象。

var myObject = [{
  "object": [{
    "id": "8062",
    "name": "name 1",
    "tags": ['tag1', 'tag2'],
    "desc": "desc 1",
  }, {
    "id": "8061",
    "name": "name 2",
    "tags": ['tag 2', 'tag 3'],
    "desc": "desc 2"
  }, {
    "id": "8060",
    "name": "name 3",
    "tags": ['tag 2', 'tag 3'],
    "desc": "desc 3"

  }]
}];

var result = myObject[0].object.reduce(function(r, e) {
  e.tags.forEach(function(t) {
    var key = t.replace(/ /g, '') + '_count'
    r[key] = (r[key] || 0) + 1;
  })
  return r;
}, {})

console.log(result)

答案 2 :(得分:0)

只需使用for-of循环遍历数组,获取tags属性的每个长度,并将每个所需的值存储到不同的变量。

var i = 1;
for (obj of myObject[0].object) {
    window["tag" + i + "_count"] = obj.tags.length; // e.g. tag1_count = 2, tag2_count = 3, etc...
    i++;
}