我有一个只有数字的简单数组。我只需要从数组中筛选出所有包含5的数字。排除号码的示例: 5、56、557,965等。我得到了奇怪的行为,只有一些数字被删除。
这是我尝试过的:
const numbers = [3, 5, 56, 58, 85, 95, 105, 905, 556];
const numbersStr = [];
// Turn "numbers" const to strings
for (const number of numbers) {
numbersStr.push(number.toString());
};
// filtering Fives
let counter = 0;
const noFives = numbersStr.filter(x => {
for (let i = 0; i < x.length; i++) {
if (x[i] == "5") {
numbersStr.splice(counter, 1);
}
}
counter++;
});
// end: filtering fives
// turn no fives to numbers
for (const strNumber of numbersStr) {
let num = Number(strNumber);
noFives.push(num);
}
console.log(noFives); /* (5) [3, 56, 85, 105, 556] */所需的结果应该仅为3。
发布于 2020-10-18 17:56:17
我发现有几个问题:
,
numbersStr.splice(counter, 1);从你要循环的字符串中删除一个字符。这意味着在你移除该角色之后的所有内容都被前移了一个位置。但是,由于您是向前循环,并且在删除字符时不会对索引变量做任何操作,因此您将跳过对下一个字符的检查。在执行splice.时,您希望向后循环或从i中减去1
filter (仅仅是一个循环结构)。filter用于创建仅包含原始数组中条目的子集的新数组。在本例中,您正在创建该数组,但它将始终为空,因为您的filter回调从不返回真值。(稍后,您将使用来自numbersStr.)的条目填充该数组
通常,您可以从字符串中删除5s,或创建一个只包含不包含5s的数字的数组,但不能同时包含这两个数字。
要删除其中包含5的条目,可以只使用filter,并且可以使用includes("5") (或indexOf("5") !== -1)查看字符串是否包含数字5
const noFives = numbers.filter(number => !String(number).includes("5"));现场示例:
const numbers = [3, 5, 56, 58, 85, 95, 105, 905, 556];
const noFives = numbers.filter(number => !String(number).includes("5"));
console.log(noFives);
发布于 2020-10-18 17:52:48
发布于 2020-10-18 17:54:48
,我只需要从数组中筛选出所有包含5的数字。
我假设你想过滤其中有5的数字。在filter回调中,只需使用toString将其转换为字符串,然后使用includes
const numbers = [3, 5, 56, 58, 85, 95, 105, 905, 556];
const noFives = numbers.filter(x => {
return x.toString().includes(5)
});
console.log(noFives); /* (5) [3, 56, 85, 105, 556] */
https://stackoverflow.com/questions/64411890
复制相似问题