-1
我有一个类似下面的数组。返回多个索引
var my_array = ['Hello', 'How Are you?', 'Hello', 'Good morning!', 'Hello'];
我的目标是让所有拥有的 '你好'
渴望结果的值的位置:
0,2,4
每当我试图my_array .indexOf( “你好”)。它只返回0,这是找到的第一个。
我有一个类似下面的数组。返回多个索引
var my_array = ['Hello', 'How Are you?', 'Hello', 'Good morning!', 'Hello'];
我的目标是让所有拥有的 '你好'
渴望结果的值的位置:
0,2,4
每当我试图my_array .indexOf( “你好”)。它只返回0,这是找到的第一个。
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");
我本来以为你的问题曾与部分匹配的元素,以及其不发生。在任何情况下,如果你想包括部分匹配这会为你工作:
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));
这是一个很值得推荐的方法,但我不认为修改'Array.prototype'是这样的一个好主意简单的任务。否则,我会说这完全回答了这个问题。 – mechalynx
您更改了数组。这不适用于他提供的阵列。 –
@IvyLynx,我同意,虽然它似乎更好使用'array.func()':) @ Brad.Smith,谢谢,修正 –