繁体   English   中英

如何在数组 (Javascript) 中使用具有多个布尔值的 indexOf 方法?

[英]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);

基本上indexOfArrayString类型的方法。 因此,当您使用布尔值时,它将不起作用

Array.prototype.indexOf()

String.prototype.indexOf()

因此,在您的情况下,只需将值设置为 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]现在是布尔值truefalse 布尔值没有.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM