计算数组中出现的对-Javascript

时间:2018-08-29 16:00:05

标签: javascript arrays count grouping

我想查找并计算数组中的一对值。

例如:

var Array = ["Apple", "Pear", "Mango", "Strawberry", "Apple", "Pear", "Orange"];

现在,我想计算数组中每对(Apple和Pear,Pear和Mango等等)出现的次数。如果数组具有不均匀对,则最后一个值应为零。

示例中数组的输出应为:

[2,1,1,1,1]

请注意,“ Apple,Pear”出现了2次,因此计数将为2,并放入新数组的第一个数字中。

我希望我解释得足够好

3 个答案:

答案 0 :(得分:1)

您可以使用哈希表通过使用两个相邻的值来对数进行计数,并为其构建键以进行计数。然后将这些值用作结果。

var array = ['Apple', 'Pear', 'Mango', 'Strawberry', 'Apple', 'Pear', 'Orange'],
    count = {},
    result;
    
array.reduce((a, b) => {
    var key = [a, b].join('|');
    count[key] = (count[key] || 0) + 1;
    return b;
});

result = Object.values(count);

console.log(result);
console.log(count);

答案 1 :(得分:0)

您可以使用sort(),因为它会将所需的对传递给回调:

var arr = ["Apple", "Pear", "Mango", "Strawberry", "Apple", "Pear", "Orange"];

var pairs = {}

arr.sort((a,b)=>{
    (a+b in pairs)?pairs[a+b]++:pairs[a+b] = 1;
})

console.log(Object.values(pairs))

答案 2 :(得分:0)

这是最简单的方法。它类似于@Nina Scholz给出的答案,但无需加入或类似的内容。还要注意,虽然默认为成对(即2),但它足以检查三元组,四元组等。

function CountMultiples(inputArray, quantity = 2) {
    var count = {};
    return inputArray.reduce(function(acc, val) {
        count[val] = (count[val] || 0) + 1;
        return count[val] % quantity > 0 ? acc : ++acc;
    }, 0);
};

var a = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 0, 0, 0, 6];
console.log(CountMultiples(a,4));//0
console.log(CountMultiples(a,3));//1
console.log(CountMultiples(a));//4