在javascript数组中打印重复项的数量

时间:2019-02-12 21:57:31

标签: javascript node.js

我正在尝试打印阵列中重复项的总数。相反,元素的总数是从数组中打印出来的,而不是那里的重复项

self.delete

8 个答案:

答案 0 :(得分:3)

如果您只想要重复项的总数,即[1,1,2,2,3] // 2,那么使用es6的解决方案可能会很短而且很甜

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];

const duplicateCount = (a) => a.length - new Set(a).size;

console.log(duplicateCount(ar));

答案 1 :(得分:1)

如果您只想获取重复项的总数,则可以创建另一个过滤掉它们的数组,然后得到差值:

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];
const duplicatesFilteredOut = ar.filter((a, i, self) => i === self.indexOf(a))
const totalDuplicates = ar.length - duplicatesFilteredOut.length

答案 2 :(得分:1)

如果要计算重复值的数量,可以使用filter(),方法是:

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];

let res = ar.filter((x, i) => ar.some((y, j) => y === x && i !== j));
console.log(res.length);

如果您需要有关重复值的详细信息,则可以执行以下操作:

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];

let res = ar.reduce((data, curr) =>
{
    data[curr] = data[curr] ? ++data[curr] : 1;
    return data;
}, {});

Object.entries(res).forEach(([val, numTimes]) =>
{
    if (numTimes > 1)
        console.log(`Value ${val} appears ${numTimes} times`);
});

答案 3 :(得分:1)

另一种选择是将函数reduce与特殊的累加器一起使用,该累加器提供dupes属性作为计数器,并提供dict作为先前计数的数字的面包屑。

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20],
      dupes = ar.reduce((a, c) => 
                  (a.dupes += a.dict[c] || 0, a.dict[c] = 1, a), {dupes: 0, dict: {}}).dupes;
      
console.log(dupes);

答案 4 :(得分:0)

您可以使用一个对象来跟踪每种元素。像这样:

const ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];

function pairs(arr) {

  const pairCount = {};
  
  for (let a of ar) {
    if (a in pairCount) {
      pairCount[a]++;
    } else {
      pairCount[a] = 1;
    }
  }
  
  return pairCount;
}
console.log(pairs(ar));

答案 5 :(得分:0)

对于已计算的值,您可以使用Set

df <- df[order(df$`Date and Time`),]
df$date_index <- 1:nrow(df)

答案 6 :(得分:0)

您可以改用此函数获取数组中重复项的总数。

const getDupCount = array => {
    const uniqueItems = new Set(array)
    const duplicates = array.length - uniqueItems.size

    return duplicates
}

答案 7 :(得分:0)

这是一种通过对象中的值返回重复项的方法:

const values = [10, 20, 20, 10, 10, 30, 50, 10, 20];

function duplicates(arr) {
  return Object.values(arr).reduce((acc, val) => {
    acc.count[val] = (acc.count[val] || 0) + 1;
    if (acc.count[val] > 1) acc.duplicates[val] = acc.count[val];
    return acc;
  }, { count: {}, duplicates: {} }).duplicates;
}

console.log(duplicates(values));

console.log(Object.values(duplicates(values)).reduce((sum, x) => sum + x, 0));