【发布时间】:2019-04-30 16:47:11
【问题描述】:
我有这个数组:
var markers = [
{
"type":"Chocolate",
"name":"KitKat",
"group":"candy",
"icon":"candy",
"coords":[5246,8980],
},
{
"type":"Fruit",
"name":"Orange",
"group":"fruits",
"icon":"fruis",
"coords":[9012,5493],
},
{
"type":"Fruit",
"name":"Banana",
"group":"fruits",
"icon":"fruis",
"coords":[9012,5493],
},
{
"type":"Food",
"name":"Rice",
"group":"foods",
"icon":"foods",
"coords":[6724,9556],
},
{
"type":"Food",
"name":"Meat",
"group":"foods",
"icon":"foods",
"coords":[6724,9556],
},
{
"type":"Food",
"name":"Beam",
"group":"foods",
"icon":"foods",
"coords":[6724,9556],
},
{
"type":"Liquid",
"name":"Water",
"group":"liquids",
"icon":"liquids",
"coords":[6724,9556],
},
{
"type":"Liquid",
"name":"Coffe",
"group":"liquids",
"icon":"liquids",
"coords":[6724,9556],
},
]
我想计算每个组在这个数组中有多少项。
我设法用这个来计算它:
var count = []
for (var i = 0; i < markers.length; i++) {
count[markers[i].group] = count[markers[i].group] + 1 || 1 ;
}
输出这个结果:
count = [
candy: 1
foods: 3
fruits: 2
liquids: 2
]
我想在另一部分使用这个值,为此我需要将数组结构更改为如下所示:
count = [
{"item": "candy","qnt":1},
{"item": "foods","qnt":3},
{"item": "fruits","qnt":2},
{"item": "liquids","qnt":2}
]
我知道我可以这样做:
var total_fruits = 0;
for (var i = 0; i < markers.length; i++) {
if (markers[i].group == "fruits"){
total_fruits++
}
}
但是想象一下,对于一组超过 50 种类型,我需要多少个 if...
我会将html部分中的值与item值使用相同的类是这样的:
<ul>
<li class="candy">
<span class="qnt">1</span>
</li>
<li class="fruits">
<span class="qnt">2</span>
</li>
<li class="foods">
<span class="qnt">3</span>
</li>
<li class="liquids">
<span class="qnt">2</span>
</li>
</ul>
有什么建议或如何改进?
【问题讨论】:
-
在您的原始代码中,您使用数组作为对象,但它是错误的。
-
@ibrahimmahrir 这不是他们已经拥有的(除非错误使用数组类型)?
-
做你已经在做的事情可能是最简单的,然后获取结果对象,并将其转换为你想要的对象列表。所以你不必每次都在数组中为你的组找到元素
标签: javascript jquery arrays multidimensional-array