[英]Javascript count values on array
I have some data and one of the fields is called tags and in will sometimes contain an array of values. 我有一些数据,并且其中一个字段称为标签,并且其中有时会包含值数组。
What I need to do is to count those values and get them into separate variables. 我需要做的是计算这些值并将它们放入单独的变量中。
Here is the data: 数据如下:
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"
}
]
}
];
And this is what I need to end up with: 这就是我需要结束的:
tag1_count = 1;
tag2_count = 3;
tag3_count = 2;
How can I do this? 我怎样才能做到这一点?
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);
You can use reduce()
like this and return object. 您可以像这样使用
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)
Simply iterate through the array using for-of
loop, get each length of tags
property and store each desired value to different variables. 使用
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++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.