[英]How do I use indexOf method with multiple Boolean values in an array (Javascript)?
我刚接触 javascript,我无法使用数组中的indexOf()
方法获取多个布尔值的位置。 我看过类似的帖子“具有多个值的 indexOf 方法”,但似乎这只适用于字符串:
let arr = ["true", "true", "false", "false", "false", "false", "false", "true"]; let newArr = []; for (let i = 0; i < arr.length; i++) { if (arr[i].indexOf("true") >= 0) { newArr.push(i); } } console.log(newArr) // result: (3) [0, 1, 7]
但是,我的代码如下所示,使用数组中的布尔值:
let arr = [true, true, false, false, false, false, false, true]; let newArr = []; for (let i = 0; i < arr.length; i++) { if (arr[i].indexOf(true) >= 0) { newArr.push(i); } } console.log(newArr) // result: Uncaught TypeError: arr[i].indexOf is not a function
我怎么能像数组中的字符串值一样得到相同的结果(位置:[0, 1, 7)? 我确实尝试使用像('"' + arr.join('","') + '"')
这样的join()
方法将布尔值转换为字符串。 它只是看起来相同,但现在在一个字符串值中,因此,它仍然不起作用。 请帮助我的 Javascript 之旅。 谢谢你的帮助!
IndexOf 返回可以在数组中找到给定元素的第一个索引,如果不存在则返回 -1,这意味着您只能找到第一个索引 (0)。
let arr = [true, true, false, false, false, false, false, false];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i]) {
newArr.push(i);
}
}
console.log(newArr);
嗯,你可以减少它。 当前索引i
有第三个参数
let arr = [true, true, false, false, false, false, false, true]; let result = arr.reduce((a,v,i) => { if(v === true) a.push(i); return a; },[]) console.log(result);
或者使用forEach
它也有一个索引参数
let arr = [true, true, false, false, false, false, false, false]; let newArr = []; arr.forEach((el, i) => { if(el === true) newArr.push(i); }) console.log(newArr);
基本上indexOf
是Array
和String
类型的方法。 因此,当您使用布尔值时,它将不起作用
因此,在您的情况下,只需将值设置为 String
let arr = [true, true, false, false, false, false, false, false] let newArr = [] for (let i = 0; i < arr.length; i++) { if (String(arr[i]).indexOf(true) >= 0) { newArr.push(i) } } console.log(newArr)
无需担心将传递给indexOf
param 的值转换为 String,因为此方法会为您转换
当您在第一个代码块中引用arr[i]
时,您引用的是索引i
处的字符串值。 这意味着当您执行以下操作时:
if (arr[i].indexOf("true") >= 0) {
...您正在arr[i]
上执行.indexOf()
,它是"true"
或"false"
(不是您的数组)。 当您对字符串执行 indexOf() 时,它将为您提供传入字符串出现位置的第一个索引。 在"true"
的情况下,如果arr[i]
是 "true" 那么你会得到索引0
因为字符串 true 从索引 0 开始。如果arr[i]
是 "false" 那么 .indexOf()将返回 -1,因为“true”未出现在您的字符串中。 如您所见,您的.index()
只是检查"true"
出现在您的字符串数组值之一中。 但是,由于您的数组值仅由“true”或“false”组成,因此无需在第一个示例中使用.indexOf()
,而只需检查数组中的当前项是否等于"true"
如果是,则将当前索引推送到您的数组。
在第二个示例的情况下,您的值是布尔值。 这意味着arr[i]
现在是布尔值true
或false
。 布尔值没有.indexOf()
方法,因此您会收到错误消息。 但是,如上所述,您不需要使用.indexOf()
检查 arr[i] 是否为true
,而只需要检查arr[i]
是否为true
,如果是,则.push()
当前索引如下:
let arr = [true, true, false, false, false, false, false, true]; let newArr = []; for (let i = 0; i < arr.length; i++) { if (arr[i]) { // roughly the same as if(arr[i] == true) newArr.push(i); } } console.log(newArr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.