给出以下示例对象:
Object {color: green, total: 0}
Object {color: red, total: 0}
Object {color: blue, total: 0}
Object {color: blue, total: 0}
Object {color: green, total: 0}
如何有效地循环并显示总出现次数的唯一颜色名称?
期望的输出:
green: 2
red: 1
blue: 2
实际输出:
green: 1
red: 1
blue: 1
我循环遍历矩阵,并检查数组中是否存在颜色名称...如果没有,则会添加,并且实际<span>
将添加到$ spans。如果名称已存在于数组中,我想增加该矩阵条目的total
,以便跟踪其出现的情况
var colorNames = [];
for (var row = 0; row < 6; row++) {
for (var col = 0; col < 6; col++) {
if (matrixPaths[row][col] == 1) {
if($.inArray(matrix[row][col].data('color'), colorNames) == -1) {
matrix[row][col].data()['total'] += 1;
colorNames.push(matrix[row][col].data('color'));
$spans.push(matrix[row][col]);
}
else {
matrix[row][col].data()['total'] += 1;
}
}
}
}
答案 0 :(得分:2)
您的代码似乎不必要地复杂化了。如果我正确理解了这个问题,你可以使用一个对象:
var count = {}, clr;
for (var i = 0; i < colors.length; i++)
{
clr = colors[i].color;
if ( count.hasOwnProperty(clr) )
count[clr] += 1;
else
count[clr] = 1;
}
其中colors
是一个对象数组。