首页 > 试题广场 > 查找元素位置
[编程题]查找元素位置
  • 热度指数:43422 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在数组 arr 中,查找值与 item 相等的元素出现的所有位置
示例1

输入

['a','b','c','d','e','f','a','b','c'] 'a'

输出

[0, 6]
function findAllOccurrences(arr, target) {
var temp = [];
    arr.forEach(function(val,index){
        val !== target ||  temp.push(index);
    });
    return temp;
}
发表于 2015-09-08 10:03:27 回复(31)
//filter
function findAllOccurrences(arr, target) {
    var result=[];
    arr.filter(function(item,index){
        return item===target&&result.push(index);
    });
    return result;
}
//for
function findAllOccurrences(arr, target) {
    var result=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]===target){
            result.push(i);
        }
    }
    return result;
}
//lastIndexOf+slice/splice
function findAllOccurrences(arr, target) {
    var result=[],index=arr.lastIndexOf(target);
    while(index>-1){
        result.push(index);
        arr.splice(index,1);//arr=arr.slice(0,index);
        index=arr.lastIndexOf(target);
    }
    return result;
}
//indexOf
function findAllOccurrences(arr, target) {
    var result=[],index=arr.indexOf(target);
    while(index>-1){
        result.push(index);
        index=arr.indexOf(target,index+1);
    }
    return result;
}

发表于 2016-08-29 08:29:22 回复(11)
查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。
function findAllOccurrences(arr, target) {
    var a = [];
    for(var i = 0; i < arr.length; i++){
        if(target == arr[i])
            a.push(i);
    }
    return a;
}

编辑于 2015-08-19 10:52:49 回复(5)
// 使用map和filter
    function findAllOccurrences(arr, item) {
        return arr.map(function(e, index) { 
            return e === item ? index : -1;
            /* 样例返回结果为[ -1, -1, -1, -1, -1, -1, -1, 0, 6 ] */
        }).filter(function(i) { 
            return i !== -1;
            /* 过滤掉 i === -1 的情况 */
        })
    }

// ES6箭头函数版
    const findAllOccurrences = (arr, item) =>
        arr.map((e, index) => e === item ? index : -1)    
           .filter(i => i !== -1);

编辑于 2017-02-14 17:51:37 回复(1)
function findAllOccurrences(arr, target) {
 var result = [];
    var idx = arr.indexOf(target);
    while(idx != -1){
        result.push(idx);
        idx = arr.indexOf(target,idx+1);
    }
    return result;
}

发表于 2015-08-25 14:59:49 回复(2)
醉了, 题目写的虎头蛇尾的
发表于 2017-08-16 12:53:11 回复(5)
function findAllOccurrences(arr, target) {
    var re=[];
    arr.forEach(function(item,index,arr){
        target==item?re.push(index):0;
    })
    return re;
}

发表于 2018-09-06 11:24:25 回复(3)
function findAllOccurrences(arr, target) {
    var newarr=[];
    var pos=arr.indexOf(target);
    if(pos != -1){       
        newarr.push(pos);
               //因为indexOf每次返回第一个找到的,所以被找过的就替换为undefined
        arr.splice(pos,1,undefined);
               //这里是递归执行
        newarr=newarr.concat(findAllOccurrences(arr, target));
    }
    return newarr;
}

编辑于 2017-11-26 10:04:16 回复(0)
function findAllOccurrences(arr, target) {
	var newArr = [];
    for(var i=0;i<arr.length;i++){
        if(arr[i]===target){
            newArr.push(i);
        }
    }
    return newArr;
}

测试通过!

发表于 2017-04-10 14:27:41 回复(0)
function findAllOccurrences(arr, target) {
    arr1 = [];
    for (let i = 0; i < arr.length; i++){
        if (target == arr[i]){
            arr1.push(i);
        }
    }
    return arr1;
}
function findAllOccurrences(arr, target) {
    res = [];
    arr.forEach((e, i) => target == e ? res.push(i): res);
    return res;
}


发表于 2020-03-24 16:57:01 回复(0)
function findAllOccurrences(arr, target) {
    var a = [];
    arr.forEach(function(item, index) {
        return item === target && a.push(index);
    });
    return a;
}

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

发表于 2019-08-08 20:12:15 回复(0)
function findAllOccurrences(arr, target) {
    var a =[];
    var pos = arr.indexOf(target);
    while(pos > -1){
        a.push(pos);
        pos = arr.indexOf(target,pos + 1);
    }
    return a;
}
发表于 2018-05-14 20:18:43 回复(0)
function findAllOccurrences(arr, target) {
    var a=[];
    for(var i=0;i<arr.length;i++)
    {
        if(arr[i]==target)
        {
            a.push(i);
        }
    }
    return a;
}
发表于 2018-04-11 16:13:27 回复(0)
function findAllOccurrences(arr, target) {
 return   arr.reduce(function(a,item,index,arrs){
    
    return  item==target?a.concat(index):a
   
    },[])
}
findAllOccurrences('abcdefabc'.split(''), 'a')


发表于 2018-04-08 23:41:17 回复(0)

map+filter

function findAllOccurrences(arr, target) {
    return arr.map(function (v,i) {if (v===target) return i;  })
        .filter(function (t) { return t>=0; })
}
发表于 2017-11-21 15:51:46 回复(0)
function findAllOccurrences(arr, target) {
	var positions = new Array();
    var pos = arr.indexOf(target);
    while(pos > -1){
		positions.push(pos);
        pos = arr.indexOf(target, pos+1);
    }
    return positions;
}

发表于 2017-04-11 09:50:54 回复(0)
function findAllOccurrences( arr, target ) {
    return arr.reduce( function( p , c , i ) {
        return p[0] == c ? p.push(i) && p : p;
},[target]).slice(1);

编辑于 2017-03-08 19:43:34 回复(0)
 function findAllOccurrences(arr, target) {
        var indexArr=[];
        for(var i = 0; i< arr.length; i++){
            if(target==arr[i]){
                indexArr.push(i);
            }
        }
        return indexArr;
    }
    console.log(findAllOccurrences('abcdefabc'.split(''), 'a').sort());
发表于 2017-02-17 16:00:10 回复(0)
function findAllOccurrences(arr, target) {
var result = []; 
    arr.forEach(function(item,index){
        if(item == target){
        result.push(index);
        }
    });
    return result;
}
因为不能在原数组上操作所以声明一个新的空数组,forEach循环判断,如果相等就将该元素位置index压入新数组中,最后返回该数组

发表于 2016-08-22 16:14:55 回复(0)
function findAllOccurrences(arr, target) {
	var arr2 = [];
    for (i = 0;i < arr.length; i++){
        if(arr[i] == target){
            arr2.push(i);
        }
    }
    return arr2;
}

发表于 2017-08-05 21:18:38 回复(0)