如何在数组 (Javascript) 中对多个布尔值使用 indexOf 方法?
How do I use indexOf method with multiple Boolean values in an array (Javascript)?
我是 javascript 的新手,我在使用数组中的 indexOf()
方法获取多个布尔值的位置时遇到了问题。我见过类似的 post "indexOf method with multiple values" 但它似乎只适用于字符串:
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)?我确实尝试使用 join()
方法,如 ('"' + arr.join('","') + '"')
将布尔值转换为字符串。它只是看起来一样,但现在是一个字符串值,因此,它仍然不起作用。请帮助我的 Javascript 旅程。感谢您的帮助!
嗯,你可以减少它。第三个参数是当前索引 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 returns 可以在数组中找到给定元素的第一个索引,如果不存在则为 -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);
基本上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
参数的值转换为字符串,因为此方法会为您转换该值
String.prototype.indexOf() > 语法 > 参数
当您在第一个代码块中引用 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() 将 return -1 因为 "true" 没有出现在你的字符串中。如您所见,您的 .index()
只是检查 "true"
是否出现在您的字符串数组值之一中。但是,由于您的数组值仅由“true”或“false”组成,因此无需在第一个示例中使用 .indexOf()
,而是您可以检查数组中的当前项是否等于 "true"
如果是,则将当前索引推送到您的数组。
对于第二个示例,您的值是布尔值。这意味着 arr[i]
现在是布尔值 true
或 false
。布尔值 not 有一个 .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);
我是 javascript 的新手,我在使用数组中的 indexOf()
方法获取多个布尔值的位置时遇到了问题。我见过类似的 post "indexOf method with multiple values" 但它似乎只适用于字符串:
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)?我确实尝试使用 join()
方法,如 ('"' + arr.join('","') + '"')
将布尔值转换为字符串。它只是看起来一样,但现在是一个字符串值,因此,它仍然不起作用。请帮助我的 Javascript 旅程。感谢您的帮助!
嗯,你可以减少它。第三个参数是当前索引 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 returns 可以在数组中找到给定元素的第一个索引,如果不存在则为 -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);
基本上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
参数的值转换为字符串,因为此方法会为您转换该值
当您在第一个代码块中引用 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() 将 return -1 因为 "true" 没有出现在你的字符串中。如您所见,您的 .index()
只是检查 "true"
是否出现在您的字符串数组值之一中。但是,由于您的数组值仅由“true”或“false”组成,因此无需在第一个示例中使用 .indexOf()
,而是您可以检查数组中的当前项是否等于 "true"
如果是,则将当前索引推送到您的数组。
对于第二个示例,您的值是布尔值。这意味着 arr[i]
现在是布尔值 true
或 false
。布尔值 not 有一个 .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);