找到数组中最常见的值

时间:2013-11-06 15:57:02

标签: javascript math

我有一个多维数组,如下所示:

[
   [ 30,  40   ]
   [ 40,  40   ]
   [ 100, 100  ]
   [ 100, 100  ]
   [ 100, 100  ]
   [ 200, 100  ]
   [ 200, 200  ]

]

如何从中获取最常见的价值对 - [100, 100]

2 个答案:

答案 0 :(得分:2)

这很有趣,我会遍历这些对并用item.join("-")哈希,而不是手动检查对中的每个项目。这也适用于任意长度的对。然后只需将对象中的has保存为键,其值为出现率。那么你可以抓住最大值并将散列分回item.split("-")以获得你的对

http://jsfiddle.net/Y9cex/

<强>更新

这是一个稍微更优化的版本,带有一个循环。它不会处理有两个不同的相同频率对的情况,但最后一个也是如此。它只会返回第一个答案

http://jsfiddle.net/Y9cex/8/

答案 1 :(得分:1)

这将创建一个对数组和相应的出现次数。然后它找到具有最多出​​现次数的对。这是fiddle

var data = [
   [ 30,  40   ],
   [ 40,  40   ],
   [ 100, 100  ],
   [ 100, 100  ],
   [ 100, 100  ],
   [ 200, 100  ],
   [ 200, 200  ]
];

var countData = new Array();

for (var i = 0; i < data.length; i++) {
    // see if the pair exists, if not increment count

    var exists = false

    for (var j = 0; j < countData.length; j++) {
        if (countData[j].pair[0] == data[i][0] && countData[j].pair[1] == data[i][1]) {
            countData[j].count++;
            exists = true;
        }
    }

    if (!exists) {
        var tmp = new Object();
        tmp.pair = data[i];
        tmp.count = 1;
        countData.push(tmp);
    }
}

var mostFrequentPair = { pair: null, count: 0 };

for (var i = 0; i < countData.length; i++) {
    if (countData[i].count > mostFrequentPair.count) mostFrequentPair = countData[i];
}

console.log('The most frequent pair is [' + mostFrequentPair.pair + '] which occurs ' + mostFrequentPair.count + ' times.');

如果需要,您可以添加另一个循环,以查找与最高出现次数相关联的任何对。