封装查找元素位置的多种方式

85 阅读1分钟

forEach

function findAll(arr, target) {
   var result = [];
   arr.forEach(function (item, index) {
     item !== target || result.push(index);
   });
   return result;
}
function findAll(arr, target) {
  var result = [];
  arr.forEach(function (item, index, arr) {
    target == item ? result.push(index) : 0;
  })
  return result;
}
function findAll(arr, target){
  var result = [];
  arr.forEach((e, i) => target == e ? result.push(i) : result);
  return result
}

filter

function findAll(arr, target) {
  var result = [];
  arr.filter(function (item, index) {
     return item === target && result.push(index);
  });
  return result;
}

for

function findAll(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 findAll(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 findAll(arr, target) {
  var result = [],
  index = arr.indexOf(target);
  while (index > -1) {
    result.push(index);
    index = arr.indexOf(target, index + 1);
  }
  return result;
}
function findAll(arr, target) {
  var arrstr = arr.join("");
  var biao = [];
  for (var i = arrstr.indexOf(target); i != -1; i = arrstr.indexOf(target, i + 1)){
    biao.push(i);
  }
  return biao;
}

map

function findAll(arr, target) {
  var temp = [];
  arr.map((v, i) => v === target && temp.push(i));
  return temp;
}

map和filter

function findAll(arr, item) {
   return arr.map(function (e, index) {
      return e === item ? index : -1;
   }).filter(function (i) {
       return i !== -1;
   })
}

箭头函数

const findAll = (arr, item) =>
   arr.map((e, index) => e === item ? index : -1)
     .filter(i => i !== -1);

递归

function findAll(arr, target) {
  var newarr = [];
  var pos = arr.indexOf(target);
  if (pos != -1) {
    newarr.push(pos);
    arr.splice(pos, 1, undefined);
    newarr = newarr.concat(findAll(arr, target));
  }
  return newarr;
}

reduce

function findAll(arr, target) {
  return arr.reduce(function (a, item, index, arrs) {
     return item == target ? a.concat(index) : a
  }, [])
}