2014-07-14 28 views
-1

我有一个类似下面的数组。返回多个索引

var my_array = ['Hello', 'How Are you?', 'Hello', 'Good morning!', 'Hello']; 

我的目标是让所有拥有的 '你好'

渴望结果的值的位置:

0,2,4

每当我试图my_array .indexOf( “你好”)。它只返回0,这是找到的第一个。

回答

2
function indexesOf(str,arr){ 
    var res = []; 
    for(i=0;i<arr.length;i++){ 
     if(arr[i] == str) 
      res.push(i); 
    } 
    return res; 
} 
var my_array = ['Hello', 'How Are you?', 'Hello', 'Good morning!', 'Hello']; 
var indexes = indexesOf("Hello", my_array); 

,或者你可以使用数组原型:

Array.prototype.indexesOf = function (str){ 
    var res = []; 
    for(i=0;i<this.length;i++){ 
     if(this[i] == str) 
      res.push(i); 
    } 
    return res; 
} 

var my_array = ['Hello', 'How Are you?', 'Hello', 'Good morning!', 'Hello']; 
var indexes = my_array.indexesOf("Hello"); 
+1

这是一个很值得推荐的方法,但我不认为修改'Array.prototype'是这样的一个好主意简单的任务。否则,我会说这完全回答了这个问题。 – mechalynx

+0

您更改了数组。这不适用于他提供的阵列。 –

+0

@IvyLynx,我同意,虽然它似乎更好使用'array.func()':) @ Brad.Smith,谢谢,修正 –

1

我本来以为你的问题曾与部分匹配的元素,以及其不发生。在任何情况下,如果你想包括部分匹配这会为你工作:

var my_array = ['Hello', 'How Are you?', 'Hello World', 'Good morning!', 'Hello']; 
function indexesOf(str,array) { 
    var arr = [], re = new RegExp(str, 'g'); 
    array.forEach(function(val,idx) { 
     if (val.match(re)) { arr.push(idx) } 
    }); 
    return arr; 
} 
console.log(indexesOf('Hello',my_array));