Javascript 返回给定元素的所有数组索引

Javascript 返回给定元素的所有数组索引,javascript,arrays,Javascript,Arrays,我编写了下面的函数,它在给定的数组和值上返回数组中值的索引数组。 我观察到它只对某些元素有效 var arr = [1,2,3,1,2,3,3,4,3] var findAll = function(arr, val) { var results = []; var length = arr.length; var pos = 0; while(pos < length) { pos = arr.indexOf(val, pos);

我编写了下面的函数,它在给定的数组和值上返回数组中值的索引数组。 我观察到它只对某些元素有效

var arr = [1,2,3,1,2,3,3,4,3]

var findAll = function(arr, val) {
    var results = [];
    var length = arr.length;
    var pos = 0;
    while(pos < length) {
        pos = arr.indexOf(val, pos);
        if (pos == -1) return [];
        results.push(pos);
        pos = pos + 1;
    }
    return results;
}

//Output:

findAll(arr,3)
[2, 5, 6, 8]

findAll(arr,1)
[] // expected [0,3]

findAll(arr,2)
[] // expected [1,4]

findAll(arr,4)
[] // expected [7]
var arr=[1,2,3,1,2,3,3,4,3]
var findAll=函数(arr,val){
var结果=[];
变量长度=arr.length;
var-pos=0;
while(pos
问题在于这一行:

if (pos == -1) return [];
您应将其替换为:

if (pos == -1) break;
或者可能:

if (pos == -1) return results;

问题在于这一行:

if (pos == -1) return [];
您应将其替换为:

if (pos == -1) break;
或者可能:

if (pos == -1) return results;

问题在于这一行:

if (pos == -1) return [];
您应将其替换为:

if (pos == -1) break;
或者可能:

if (pos == -1) return results;

问题在于这一行:

if (pos == -1) return [];
您应将其替换为:

if (pos == -1) break;
或者可能:

if (pos == -1) return results;

让我们快速重写函数。这就是您所需要的:

var findAll = function(arr, val) {
    var results = [];
    for(var i = 0; i < arr.length; i++){ // Loop through the array.
        if(arr[i] === val){              // If the desired value is found
            results.push(i);             // Push it's index to `results`
        }
    }
    return results;
}
var findAll=函数(arr,val){
var结果=[];
for(var i=0;i

它可能不是最有效的,因为不管发生什么,它都会迭代整个数组,但它的工作方式很有魅力。

让我们快速重写该函数。这就是您所需要的:

var findAll = function(arr, val) {
    var results = [];
    for(var i = 0; i < arr.length; i++){ // Loop through the array.
        if(arr[i] === val){              // If the desired value is found
            results.push(i);             // Push it's index to `results`
        }
    }
    return results;
}
var findAll=函数(arr,val){
var结果=[];
for(var i=0;i

它可能不是最有效的,因为不管发生什么,它都会迭代整个数组,但它的工作方式很有魅力。

让我们快速重写该函数。这就是您所需要的:

var findAll = function(arr, val) {
    var results = [];
    for(var i = 0; i < arr.length; i++){ // Loop through the array.
        if(arr[i] === val){              // If the desired value is found
            results.push(i);             // Push it's index to `results`
        }
    }
    return results;
}
var findAll=函数(arr,val){
var结果=[];
for(var i=0;i

它可能不是最有效的,因为不管发生什么,它都会迭代整个数组,但它的工作方式很有魅力。

让我们快速重写该函数。这就是您所需要的:

var findAll = function(arr, val) {
    var results = [];
    for(var i = 0; i < arr.length; i++){ // Loop through the array.
        if(arr[i] === val){              // If the desired value is found
            results.push(i);             // Push it's index to `results`
        }
    }
    return results;
}
var findAll=函数(arr,val){
var结果=[];
for(var i=0;i

它可能不是最有效的,因为不管发生什么,它都会迭代整个数组,但它的工作方式很有魅力。

问题是您一直搜索到数组末尾。如果你找不到东西,你就退货

因此,如果您搜索的值不是数组中的最后一个元素,您将得到[]

您应该将if更改为:

if (pos != -1) results.push(pos);

这个问题一直搜索到数组结束。如果你找不到东西,你就退货

因此,如果您搜索的值不是数组中的最后一个元素,您将得到[]

您应该将if更改为:

if (pos != -1) results.push(pos);

这个问题一直搜索到数组结束。如果你找不到东西,你就退货

因此,如果您搜索的值不是数组中的最后一个元素,您将得到[]

您应该将if更改为:

if (pos != -1) results.push(pos);

这个问题一直搜索到数组结束。如果你找不到东西,你就退货

因此,如果您搜索的值不是数组中的最后一个元素,您将得到[]

您应该将if更改为:

if (pos != -1) results.push(pos);
这就是如何做到的。 很简单。并且不会遍历整个数组

function check(ar, val){
    var pos = 0;
    var tmp = [];
    pos = ar.indexOf(val, pos);
    while (pos >= 0){
        tmp.push(pos);
        pos = ar.indexOf(val, pos + 1);
    }
return tmp;
()

这是怎么做的。 很简单。并且不会遍历整个数组

function check(ar, val){
    var pos = 0;
    var tmp = [];
    pos = ar.indexOf(val, pos);
    while (pos >= 0){
        tmp.push(pos);
        pos = ar.indexOf(val, pos + 1);
    }
return tmp;
()

这是怎么做的。 很简单。并且不会遍历整个数组

function check(ar, val){
    var pos = 0;
    var tmp = [];
    pos = ar.indexOf(val, pos);
    while (pos >= 0){
        tmp.push(pos);
        pos = ar.indexOf(val, pos + 1);
    }
return tmp;
()

这是怎么做的。 很简单。并且不会遍历整个数组

function check(ar, val){
    var pos = 0;
    var tmp = [];
    pos = ar.indexOf(val, pos);
    while (pos >= 0){
        tmp.push(pos);
        pos = ar.indexOf(val, pos + 1);
    }
return tmp;

()

我需要根据我的作业使用'indexOf'方法来实现这一点:)好吧,这是一个愚蠢的作业xD,在这种情况下,@GZ可能最好地解释了问题所在。我需要根据我的作业使用'indexOf'方法来实现这一点:)好吧,这是一个愚蠢的作业xD,在那种情况下,@GZ可能最好地解释了什么是错的。我需要按照我的作业使用'indexOf'方法来实现这一点:)好吧,这是一个愚蠢的作业xD,在这种情况下,@GZ可能最好地解释了什么是错的。我需要按照我的作业使用'indexOf'方法来实现这一点:)好吧,这是一个愚蠢的作业xD,在这种情况下,@GZ可能是解释问题的最好方法。