在javascript的入口点元素后返回多个数字



我想在文本数组中搜索,并在条目数组中找到一个此元素。在文本中,并检查下一个或多个元素是否为数字,返回数字或这些数字

但是我的代码只适用于入口元素后的1个数字元素,正如我之前提到的,我希望入口元素后有多个数字,直到它到达字符串类型的元素。

这是我的代码:

const entry = [
'ENTRY', 'ZONE', 'ENTRI', 'ENTRE', 'ENTR', 'ZON', 'ZONI'
];
const text = ['HI', 'GOOD', 564, 'CLX', 'ENTRI', 'YYY', 'ENTRY', 657, 780, 34, 'XXX'];
const set = new Set(entry);
let result = [];
for (let i = 0; i < text.length; i++) {
let curr = text[i],
next = text[i + 1];
if (set.has(curr) && typeof next == 'number') {
result.push(next);
}
}
console.log(result)

输出如下://output : [ 657 ]

我想要的://output : [657 , 780 , 34]

可以在相同的循环变量上添加嵌套循环,并添加数组值,只要它们是数值。

const entry = [
'ENTRY', 'ZONE', 'ENTRI', 'ENTRE', 'ENTR', 'ZON', 'ZONI'
];
const text = ['HI', 'GOOD', 564, 'CLX', 'ENTRI', 'YYY', 'ENTRY', 657, 780, 34, 'XXX'];
const set = new Set(entry);
let result = [];
for (let i = 0; i < text.length; i++) {
if (set.has(text[i])) {
while (typeof text[i + 1] == "number") {
result.push(text[++i]);
}
}
}
console.log(result)

你的条件表明,有效元素必须紧跟set成员之后,这只适用于第一个元素,而不是所有元素。

另一种方法是打开找到成员的标志,并在到达另一个不是成员的字符串时关闭它。

const entry = ['ENTRY' , 'ZONE' , 'ENTRI' , 'ENTRE' , 'ENTR' ,'ZON' , 'ZONI'];
const text = ['hi' , 'good' , 564 , 'clx' , 'entri' , 'yyyy' , 'ENTRY' ,657 , 780 , 34 , 'xxxx'];
const set = new Set(entry);
let result = [];
let isAfterMatch = false
for (let i = 0; i < text.length; i++) {
const curr = text[i];
if (isAfterMatch && typeof curr === 'number') {
result.push(curr);
} else {
isAfterMatch = set.has(curr)
}
}
console.log(result)