我想查找并计算数组中的一对值。
例如:
var Array = ["Apple", "Pear", "Mango", "Strawberry", "Apple", "Pear", "Orange"];
现在,我想计算数组中每对(Apple和Pear,Pear和Mango等等)出现的次数。如果数组具有不均匀对,则最后一个值应为零。
示例中数组的输出应为:
[2,1,1,1,1]
请注意,“ Apple,Pear”出现了2次,因此计数将为2,并放入新数组的第一个数字中。
我希望我解释得足够好
答案 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