我正在嘗試這個解決方案,但它沒有給我想要的結果。我不想計算 1 對的數量,因為它不是真正的一對,因為它出現了 4 次。我需要計算“完美”對,例如在這種情況下:5 和 2。現在這給了我 4 作為結果,它應該是 2。
我怎么能做到這一點?我被困住了。
let ar1 = [12, 5, 5, 2, 1, 1, 1, 1, 2];
const countPairs = (ar) => {
let obj = {};
ar.forEach((item) => {
obj[item] = obj[item] ? obj[item] 1 : 1;
});
return Object.values(obj).reduce((acc, curr) => {
acc = Math.floor(curr / 2);
return acc;
}, 0);
};
console.log( countPairs(ar1) )
uj5u.com熱心網友回復:
您可以按 2 過濾物件值并計算串列
let ar1 = [12, 5, 5, 2, 1, 1, 1, 1, 2];
const countPairs = (ar) => {
let obj = {};
ar.forEach((item) => {
obj[item] = obj[item] ? obj[item] 1 : 1;
});
return Object.values(obj).filter(e => e == 2).length;
};
console.log(countPairs(ar1))
uj5u.com熱心網友回復:
這可以是單行使用Map:
const countPairs(arr) => [...arr.reduce((dict, n) => dict.set(n, (dict.get(n) ?? 0) 1), new Map()).values(),].filter((n) => n === 2).length;
let ar1 = [12, 5, 5, 2, 1, 1, 1, 1, 2];
const countPairs = (arr) =>
[
...arr
.reduce((dict, n) => dict.set(n, (dict.get(n) ?? 0) 1), new Map())
.values(),
].filter((n) => n === 2).length;
console.log(countPairs(ar1));
uj5u.com熱心網友回復:
或者那個
const
ar1 = [12, 5, 5, 2, 1, 1, 1, 1, 2]
, countPerfectPairs = arr => arr.reduce((r,val,i,{[i 1]:next})=>
{
if(!r.counts[val])
{
r.counts[val] = arr.filter(x=>x===val).length
if (r.counts[val]===2) r.pairs
}
return next ? r : r.pairs
},{counts:{},pairs:0})
console.log( countPerfectPairs(ar1) )
如果您更喜歡詳細資訊:
const
ar1 = [12, 5, 5, 2, 1, 1, 1, 1, 2]
, countPerfectPairs = arr => arr.reduce((r,val)=>
{
if(!r.counts[val])
{
r.counts[val] = arr.filter(x=>x===val).length
if (r.counts[val]===2) r.pairs
}
return r
},{counts:{},pairs:0})
console.log( countPerfectPairs(ar1) )
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355695.html
標籤:javascript 数组
下一篇:如何跨多個dyno實作快取
