【问题标题】:Array.indexOf insensitive data typeArray.indexOf 不敏感数据类型
【发布时间】:2017-10-25 15:11:51
【问题描述】:

我一直在 Google Chrome 控制台中使用Array.indexOf,我尝试了这些代码

[1,2,3].indexOf(3);
[1,2,"3"].indexOf("3");

他们都返回了 2,但是当我尝试这些代码时

[1,2,"3"].indexOf(3);
[1,2,3].indexOf("3");

他们都返回-1。我希望它也返回 2,我该怎么做?感谢您的帮助、时间和努力!

【问题讨论】:

  • 更改 [1,2,"3"].indexOf("3");和 [1,2,3].indexOf(3);
  • 可能只是把所有东西都变成一个字符串然后在indexOf
  • 为什么要在数组中存储不同的数据类型?您不能确保先将所有内容都转换为数字吗?
  • 好主意,@A.Lau。谢谢 A. Lau 和 Edison

标签: javascript types indexof


【解决方案1】:

您可以使用Array.prototype.findIndex()== 运算符

var n = 3;

console.log(
  [1,2,3].findIndex(el => el == n)
, [1,2,"3"].findIndex(el => el == n)
)

【讨论】:

  • 感谢您的努力...它在字符串和整数之间运行良好,但在布尔值和字符串之间运行不佳...但我感谢您的努力...
  • “在布尔值和字符串之间”是什么意思?
  • 对不起,如果我的评论不是很清楚,这是一个例子 var n = true; console.log( [1,2,true].findIndex(el => el == n), [1,2,"true"].findIndex(el => el == n)) 都返回 0。跨度>
  • 这与原始问题的要求不同。
【解决方案2】:

扩展 guest271314 的帖子:将两个值都转换为字符串。这也适用于数字和字符串

val = true

console.log([1,2,"true"].findIndex(item => String(item) === String(val)))

【讨论】:

  • 如果要将值转换为字符串,请使用===
猜你喜欢
  • 2020-11-10
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2011-05-15
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多