javascript - 我想计算数组中匹配的相邻项目并返回计数
问题描述
我有一个数组,我想找到所有相邻的匹配项并对它们进行计数,然后返回计数,在 .map() 之类的循环中执行,因此不需要存储超出当前元素计数的内存。我需要使用这个数量的当前元素为每组元素保留足够的空间
array = [ball, batter, batter, amount, amount, github, github, github, account, account, account, account, account, account, account, github, github, github]
此数组所需结果的示例是:第一个循环将返回 1,第二个循环将返回 2,然后是 2,然后是 3,然后是 7,然后是 3
并且此计数将用作保留空间的变量,例如
number to reserve: count
因此通过每个循环,变量count
将被更改并更新为当前元素计数,并且计数的循环不会停止,直到下一个元素与当前元素不匹配,并且该变量count
也将无法使用,直到找到所有并发匹配项,因此如果我将其放在console.log(count)
函数的末尾,我将分别获得每个数字输出
解决方案
您可以轻松地将数组中的连续字符串计算为:
const array = ["ball", "batter", "batter", "amount", "amount", "github", "github", "github", "account", "account", "account", "account", "account", "account", "account", "github", "github", "github"]
const result = [];
let last = array[0], lastSameIndex = 0;
for (let i = 1; i < array.length; ++i) {
if (array[i] !== last) {
result.push(i - lastSameIndex);
lastSameIndex = i;
last = array[i];
}
}
result.push(array.length - lastSameIndex);
console.log(result);
让我们将一些初始值声明为
last = array[0]
, 所以last = "ball"
, 和lastSameIndex = 0
所以我们必须从索引开始1
,我们只需要考虑两个元素不相等的单一情况,即array[i] !== last
。如果它们不相等,那么我们必须将相同元素的计数推到现在:
result.push(i - lastSameIndex);
现在,我们必须更新新的值和索引,即last
我们必须再次计算该元素的元素。
lastSameIndex = i;
last = array[i];
到目前为止一切都很好,但我们还必须处理循环结束的情况,在这种情况下,我们必须从计数开始的位置(即last
开始或lastSameIndex
直到最后一个元素)推送最后一个元素的计数。
result.push(array.length - lastSameIndex);
Second solution
const array = [ "ball", "batter", "batter", "amount", "amount", "github", "github", "github", "account", "account", "account", "account", "account", "account", "account", "github", "github", "github"];
let lastStr = "",
num = 0;
const result = array
.map((s) => {
if (lastStr !== s) {
lastStr = s;
num = num === 0 ? 1 : 0;
}
return num;
})
.join("")
.match(/(\d)\1*/g)
.map((s) => s.length);
console.log(result);
推荐阅读
- dependencies - 在 yocto do_rootfs() 活动中查找依赖问题
- sas - 在 SAS 中添加 YTD 列
- reactjs - 如何在运行时从 React 应用程序访问 Azure Web App AppSettings
- javascript - 数据表 - 删除列过滤器中的“x”
- excel - 使用 VBA 从多个关闭的文件创建一个主文件。所有关闭的文件都保存在同一个文件夹下,格式相同
- javascript - 谷歌地图以 HTML 格式工作,但不会显示在托管网站上
- mysql - 优化查询以使用两个表之间的连接并将行转换为列
- vim - 从网络上的原始文件复制/粘贴到 .vim
- java - Union+Find算法的应用(不相交集)
- python - 将请求 403 错误 django restframework