javascript - 快速计算和删除数组中重复项的方法

标签 javascript arrays sorting duplicates

我有一个包含重复项的数组

array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"]

我想摆脱重复项(不区分大小写)并创建一个新数组来计算重复项。

在其中一个答案中,我看到了这个函数:

function count_array(arr) {
    var a = [], b = [], prev;

    arr.sort();
    for ( var i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
             a.push(arr[i]);
             b.push(1);
        } else {
             b[b.length-1]++;
        }
        prev = arr[i];
     }
     return [a, b];
 }

返回两个数组:

First array: ["String 1", "String 2", "STRING 1", "String 3"]
Second array: [2, 2, 1, 1]

如果不区分大小写,我希望 String 1, STRING 1, string 1, StRING 1 的所有实例都被视为 String 1

对于大型数组还有更好的方法吗?例如数组长度为 10K?

最佳答案

将字符串数组缩减为对象,使用字符串作为键,使用出现次数作为值。使用 Object.keys() 获取第一个数组,使用 Object.values() 获取第二个数组:

const array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"]

const counts = array.reduce((r, s) => {
  const key = s[0].toUpperCase() + s.substring(1).toLowerCase();
  
  r[key] = (r[key] || 0) + 1;
  
  return r;
}, {});

const first = Object.keys(counts);
const second = Object.values(counts);

console.log(first);
console.log(second);

要获得按重复项数量排序的结果,请使用Object.entries() 将reduce 结果转换为对数组。按第二个值(计数)排序。要获取两个数组,请使用 Array.map()。

const array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"]

const counts = Object.entries(array.reduce((r, s) => {
  const key = s[0].toUpperCase() + s.substring(1).toLowerCase();
  
  r[key] = (r[key] || 0) + 1;
  
  return r;
}, {}))
.sort(([, a], [, b]) => b - a);

const first = counts.map(([s]) => s);
const second = counts.map(([, n]) => n);

console.log(first);
console.log(second);

关于javascript - 快速计算和删除数组中重复项的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839677/

相关文章:

javascript - Chrome 中奇怪的显示/隐藏行为

javascript - 单击按钮清除输入字段

javascript - 如何衡量一个CSS文件的CDN命中率?

php - 引用 - 这个错误在 PHP 中是什么意思?

javascript - jquery自动完成不显示数组的值

ios - 按日期排序的 Xcode UITableView 部分和行(来自 mutableArray)

Perl 频率排序和其他东西

php - 新文本字段出现在选项卡上?

algorithm - M 位置圆移 N 大小数组的最快算法

javascript - 对 Javascript 数组进行排序并获取数字差异