-3

我有一个看起来像这样的多维数组:

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

]

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

4

2 回答 2

2

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

http://jsfiddle.net/Y9cex/

更新

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

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

于 2013-11-06T16:31:35.743 回答
1

这将创建一个对数组和相应的出现次数。然后它找到出现次数最多的对。这是小提琴

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.');

如果需要,您可以添加另一个循环来查找出现次数最多的任何对。

于 2013-11-06T16:20:06.973 回答