显示唯一对象名称及其出现次数

时间:2014-11-08 21:06:03

标签: javascript jquery

给出以下示例对象:

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;
                        }
                    }
                }           
            }

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是一个对象数组。