首页 > 试题广场 >

查找元素位置

[编程题]查找元素位置
  • 热度指数:72416 时间限制: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 回复(35)
查找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)
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)
// 第一种,for
function findAllOccurrences(arr, target) {
    const result = []
    for (let idx = 0, len = arr.length; idx < len && arr.slice(idx).includes(target); idx++) {
        if (arr[idx] === target) {
            result.push(idx)
        }
    }
    return result
}
// 第二种,递归
function findAllOccurrences(arr, target, fromIdx = 0) {
    const idx = arr.indexOf(target, fromIdx)
    if (idx < 0) {
        // 没找到
        return []        
    }
    return [idx, ...findAllOccurrences(arr, target, idx+1)]
}



发表于 2022-07-16 18:54:18 回复(0)
function findAllOccurrences(arr, target) {
    return arr.map(function(val,index){
        if(val===target){
            return index
        }
    })

}
发表于 2022-04-27 13:55:43 回复(0)
function findAllOccurrences(arr, target) { var res = new Array(); this.target = target; arr.forEach(function(v,i){ if(v == target){ res.push(i); } }) return res; }
发表于 2022-03-13 10:25:16 回复(0)
利用map()以及filter()来做:1.首先利用map()筛选出相同的元素,输出相同元素的索引值,不同元素输出-1。2.再将map()筛选出来的数组进行过滤,使用filter()过滤出数组中索引号不等于-1的元素。
function findAllOccurrences(arr, target) {
    return arr.map((value,index) => value === target ? index : -1).filter((index) => index!== -1)
}


发表于 2022-01-13 22:27:32 回复(0)
// reduce 普通版
function findAllOccurrences(arr, target) {
    return res = arr.reduce((prevItem, currentItem, i) => {
        if(currentItem == target) {
            prevItem.push(i)
          }
          return prevItem;
    }, [])
}
// redeuce 简洁版
function findAllOccurrences(arr, target) {
    return res = arr.reduce((prevItem, currentItem, i) => (currentItem == target && prevItem.push(i),prevItem), [])
}
发表于 2021-12-13 10:15:24 回复(0)
function findAllOccurrences(arr, target) {
    var newarr=[];
for(var i=0;i<arr.length;i++){
    if(arr[i]==target){
       newarr.push(i);
    }
}
    return newarr;
}
发表于 2021-07-09 15:22:10 回复(0)
function findAllOccurrences(arr, target) {
        let q = 0;
        let arr1 = [];
        for (; arr.indexOf(target) !== -1;) {
            arr1.push(arr.indexOf(target) + q);
            arr.splice(arr.indexOf(target), 1);
            q++;
        }
        return arr1
    }

发表于 2020-11-21 20:46:40 回复(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) {
 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) {
        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)