javascript - 将数组组分组为单独的子数组组

标签 javascript arrays sorting grouping

<分区>

我有一个带有字符串的 JS 数组,例如:

let a = ["a", "a", "a", "b", "c", "c", "b", "b", "b", "d", "d", "e", "e", "e"]

我需要比较数组中的重复字符串,如果存在重复字符串,它将像这样分隔:

[ ["a", "a", "a"], ["b"], ["c", "c"], ["b", "b", "b"], ["d", "d"], ["e", "e", "e"] ]

我试图将它与 for 循环进行比较,但我不知道如何编写代码以便数组检查自己的字符串是否重复,而没有预先确定的字符串进行比较。

let a = ["a", "a", "a", "b", "c", "c", "b", "b", "b", "d", "d", "e", "e", "e"];

let b = [];

let len = a.length;

for (let i = 0; i < len; i++) {
  if (b.indexOf(a[i]) !== 1) {
    b.push(a[i]);
  }
}

console.log(b)

最佳答案

如果您从数组中的第零个元素开始,您会得到 [["a"]] 然后如果您从第一个元素开始迭代并检查它是否与前一个元素相同可以决定是推送到现有的最后一个数组,还是开始一个新的数组。

所以使用 slice 获取除第零个元素之外的数组,并使用 forEach 累积新数组:

let a = ["a", "a", "a", "b", "c", "c", "b", "b", "b", "d", "d", "e", "e", "e"]

var result = [[a[0]]]
a.slice(1).forEach( (e,i) => {
  if(e == a[i]) {
    result[result.length-1].push(e);
  } else{
    result.push([e]);
  }
});
console.log(result)

如果你也想跟踪计数,那非常相似

let a = ["a", "a", "a", "b", "c", "c", "b", "b", "b", "d", "d", "e", "e", "e"]

var result = [{count:1, char:a[0]}]
a.slice(1).forEach( (e,i) => {
  if(e == a[i]) {
    result[result.length-1].count++;
  } else{
    result.push({count:1, char: e});
  }
});
console.log(result)

关于javascript - 将数组组分组为单独的子数组组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66044336/

相关文章:

javascript - 使用对象访问属性值

javascript - 如何在 javascript 中删除数组元素而不使用任何内置数组方法?

javascript - 添加原生数组原型(prototype)方法

c++ - iPhone 应用程序因 C++ 代码而崩溃

c - 使用 C qsort() 对结构体中的动态数组进行排序

sorting - Elasticsearch 列表索引按名称排序

javascript - CSS:替换淡出图像

python - 如何在不硬编码维数的情况下枚举 ND 数组的所有元素?

algorithm - 插入排序比较?

javascript - 如何将百分比分配给 CSSStyleDeclaration 的属性