数组句子中的字符串索引位置

3

我正在尝试在数组中执行简单的indexOf操作。但问题是它只会查找数组节点中的整个文本。

var arr = new Array();
arr.push("hello world");
var result = arr.indexOf("hello");

我的问题是我得到的结果是-1,有没有办法在不使用另一个循环的情况下让indexOf在每个数组元素内进行搜索?

谢谢


请查看我的更新答案。 - Adil
6个回答

8
不,使用arr.indexOf无法搜索子字符串,必须使用循环。虽然可以向数组添加方法以调用它来查找数组中的子字符串。 演示 函数定义。
arr.containsIndexOf = function(str) { 
    for(var i = 0; i < arr.length; i++){
     if(arr[i].indexOf(str) != -1)
         return i;
    }
    return -1;
}

函数调用

arr.containsIndexOf("hello")

1

就像 Adil 说的那样,你需要使用循环。

var myArr= new Array();
myArr.push("hello world");
function searchArr(txt, arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].toLowerCase().indexOf(txt.toLowerCase()) > -1) {
            return i
        }
    }
}

使用这个函数的方式如下:
searchArr("hello",myArr); //returns 0

您可能有一个包含多个“hello”的数组,因此您需要知道它们的所有位置。

myArr.push("hello world")
myArr.push("hello Pluto");
myArr.push("hi sun");
myArr.push("Hello Moon");
function searchArr(txt, arr) {
var arrList = new Array();
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].toLowerCase().indexOf(txt.toLowerCase()) > -1) {
           arrList.push(i);
        }
    }
return arrList
}
searchArr("hello",myArr); //returns [0, 1, 3]

在你的第一个函数(更简单的那个)中,如果在数组中没有找到搜索项,你可以返回-1。 - Vivek Jain

1
正如 @Adil 所说,您不能使用 ArrayindexOf 函数查找子字符串,但是您可以使用 StringindexOf 函数查找子字符串: 示例:
var mystr = 'hello world';
var index = mystr.indexOf('hello');

使用您的示例,您应该尝试类似以下内容的一些事情:

var arr = new Array();
arr.push("hello world");
var mystr = arr[0]; // this is String object
var index = mystr.indexOf("hello");

Documentation:
string.indexOf
array.indexOf


0

你将整个字符串 hello world 推入数组的一个索引中,因此当使用indexOf时,它只能匹配该数组索引中的整个项目。

var result = arr.indexOf("hello world");

一种解决方法是这样的:

var arr = new Array();
arr.push("hello world");

for(var i = 0; i < arr.length; i++){
     if(arr[i].indexOf('hello') != -1)
         return i;
}

请查看jsfiddle


0
// Get index of the first matching item in an array
// or -1 if the item is not found
function SearchArray(arr, txt) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].indexOf(txt) > -1) {
            return i;
        }
    }
    return -1;
}

函数调用:

var someArray = new Array();
someArray.push("hello world");

SearchArray(someArray, "hello");

0

试试这个:

var arr = new Array();
arr.push("hello world");
var result = arr[0].indexOf("hello");

因为这是一个数组,所以您需要使用它的索引来访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接