javascript - 二维数组中的每个数组出现
问题描述
我有两个数组 - 网格和模式
const G = [
[9,9,9,9,9,9]
]
const P = [
[9,9]
]
我想在 G 中获取 P 的每次出现。所以输出将是这样的:
[
{
line: 0,
charAtStart: 0,
charAtEnd: 2,
},
{
line: 0,
charAtStart: 2,
charAtEnd: 4,
},
{
line: 0,
charAtStart: 4,
charAtEnd: 6,
},
{
line: 0,
charAtStart: 6,
charAtEnd: 8,
},
{
line: 0,
charAtStart: 8,
charAtEnd: 10,
}
]
到目前为止我所做的:
for(let i = 0, l = G.length; i < l; i++) {
if(G[i].toString().includes(P[0].toString())) {
console.log(G[i].toString(), '\n',
P[0].toString(), '\n',
G[i].toString().indexOf(P[0].toString())
)
availableFirstLines.push({
line: i,
charAtStringStart: G[i].toString().indexOf(P[0].toString()),
charAtStringEnd: (G[i].toString().indexOf(P[0].toString())) + P[0].toString().length - 1
})
}
}
所以我循环通过G
. 首先,我检查是否P
存在于G[0]
. 如果是这样,我推送它的 indexOf 第一个字符和最后一个字符。所以我的输出是
[
{
line: 0,
charAtStart: 0,
charAtEnd: 2,
}
]
问题是它确实只检测到第一次出现然后继续。我应该有嵌套循环来获取每一次出现吗?
编辑 我不小心提供了错误的输出。我已经改变了它。
解决方案
基本上你需要三层嵌套循环:
- 循环 G 中的值
- 为 G 中的每个值循环 P 中的值
- 循环遍历 G 值以查找所有出现的 P 值
第三部分可以通过while
循环完成indexOf
,将fromIndex
值设置为刚刚超过上一场比赛的开始:
const G = [
[9,9,9,9,9,9]
]
const P = [
[9,9]
]
let availableFirstLines = [];
G.forEach((Gv, Gi) => {
const Gs = Gv.toString();
P.forEach(Pv => {
const Ps = Pv.toString();
let i, fi = 0;
while ((i = Gs.indexOf(Ps, fi)) >= 0) {
availableFirstLines.push({
line: Gi,
charAtStringStart: i,
charAtStringEnd: i + Ps.length - 1
});
fi = i + 1;
}
})
});
console.log(availableFirstLines);
推荐阅读
- html - css网格,一些卡片大尺寸,如何放置它们
- android - 如何解决 Firebase 找不到 firebase-auth-icense.aar 问题?
- sql - 比较上一列数据与下一列数据
- c# - 将实体框架连接字符串更改为服务器
- r - 两个单独数据集中的纬度和经度之间的距离
- json - 第 6 行有什么问题导致解析错误?
- javascript - 带有类的属性的Jquery单击事件
- adapter - 接收位置上的 SFTP 适配器不拾取没有扩展名的文件
- python - Python Pandas:有效地将 1 Col(系列)粘贴到 pd.df w/ >1 Cols 的底部;新行的其他列应该为空
- amazon-s3 - Redshift COPY 命令无法从 S3 加载数据