首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数字为5的数组中过滤数字

从数字为5的数组中过滤数字
EN

Stack Overflow用户
提问于 2020-10-18 17:48:46
回答 5查看 68关注 0票数 3

我有一个只有数字的简单数组。我只需要从数组中筛选出所有包含5的数字。排除号码的示例: 5、56、557,965等。我得到了奇怪的行为,只有一些数字被删除。

这是我尝试过的:

代码语言:javascript
复制
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。

EN

回答 5

Stack Overflow用户

发布于 2020-10-18 17:56:17

我发现有几个问题:

  1. ,你正在使用numbersStr.splice(counter, 1);从你要循环的字符串中删除一个字符。这意味着在你移除该角色之后的所有内容都被前移了一个位置。但是,由于您是向前循环,并且在删除字符时不会对索引变量做任何操作,因此您将跳过对下一个字符的检查。在执行splice.

时,您希望向后循环或从i中减去1

  1. 你错误地使用了filter (仅仅是一个循环结构)。filter用于创建仅包含原始数组中条目的子集的新数组。在本例中,您正在创建该数组,但它将始终为空,因为您的filter回调从不返回真值。(稍后,您将使用来自numbersStr.)

的条目填充该数组

通常,您可以从字符串中删除5s,创建一个只包含不包含5s的数字的数组,但不能同时包含这两个数字。

要删除其中包含5的条目,可以只使用filter,并且可以使用includes("5") (或indexOf("5") !== -1)查看字符串是否包含数字5

代码语言:javascript
复制
const noFives = numbers.filter(number => !String(number).includes("5"));

现场示例:

代码语言:javascript
复制
const numbers = [3, 5, 56, 58, 85, 95, 105, 905, 556];
const noFives = numbers.filter(number => !String(number).includes("5"));
console.log(noFives);

票数 2
EN

Stack Overflow用户

发布于 2020-10-18 17:52:48

您可以在一行程序中执行此操作,使用.filter过滤numbers的元素,使用.toString将每个元素转换为字符串,使用.includes检查此字符串是否包含5:

代码语言:javascript
复制
const numbers = [3, 5, 56, 58, 85, 95, 105, 905, 556];

const noFives = numbers.filter(x => !x.toString().includes("5"));

console.log(noFives);

票数 0
EN

Stack Overflow用户

发布于 2020-10-18 17:54:48

,我只需要从数组中筛选出所有包含5的数字。

我假设你想过滤其中有5的数字。在filter回调中,只需使用toString将其转换为字符串,然后使用includes

代码语言:javascript
复制
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]  */

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64411890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档