javascript - 将数组组分组为单独的子数组组
问题描述
我有一个带有字符串的 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)
推荐阅读
- xpath - 如何使用 IMPORTXML 提取带有/不带有 ALT 和标题标签的图像列表?
- javascript - 如何在 knex.js 中加入外部表条目的计数?
- python - Python连接多个已知扩展名'str'对象的大文件没有属性'read'
- python - driver.press_keycode(84):全局名称“驱动程序”未定义
- sharepoint - LinkedIn API 不工作,返回错误:HTTP GET - 远程服务器返回错误:(410)消失
- python - 如何在 Python 中以递归方式使用运行长度编码
- javascript - BrowserFS没有将数据写入文件?
- onelogin - 从 dotnetcore 应用程序注销,由 onelogin 使用 oauth 进行身份验证
- php - 在 laravel 4.2 中登录后如何重定向?
- c# - 使用 ASPNETCORE_ENVIRONMENT 在 Azure 上覆盖 appsettings.json