方法一

新创建一个数组用来存储结果,利用forEach()循环数组,找出数组中与元素target相同的元素,将其位置push进结果数组。遍历数组还可用for和for...in。

function findAllOccurrences(arr, target) {
    let newArr = [];
    arr.forEach((el, index)=>{
        //  el == target && newArr.push(index);
        if(el == target){
            newArr.push(index);
        }
    })
    return newArr;
}

方法二

利用map()+filter()实现,先用map()遍历数组输出一个结果数组,这个结果数组是原数组中元素对应的索引位置,与元素target相等的元素输出其对应索引,不等的元素输出-1;再用filter()输出结果数组中不为1的元素。

function findAllOccurrences(arr, target) {
    return arr.map((elem,index)=>elem===target ? index:-1).filter((e)=>e!==-1);
}

方法三

新创建一个数组存储结果,利用arr.indexOf()或者lastIndexOf()来查找数组中与target相同的元素,利用while循环来判断是否找到相同的元素,找到就将其位置push进结果数组,并将搜索位置+1,继续往下搜索。 indexOf(item, stratIndex):查找元素第一次出现的位置,找到元素位置,否则返回-1,第二个参数可以指定开始搜索的位置。

function findAllOccurrences(arr, target) {
    var Arr = [];
    index = arr.indexOf(target);
    while(index>-1){
        Arr.push(index);
        index = arr.indexOf(target,index+1);
    }
    return Arr;
}