如何计算数组及字符串中元素出现的次数

263 阅读1分钟

数组计数

过滤数组实现计数

filter():利用指定的函数确定是否在返回的数组中包含某一项

function count(arr,item){
    var count = arr.filter(function (i){
         return i === item;
    });
    return count.length;
}
利用过滤及箭头函数
function count(arr,item){
    return arr.filter((val,index) => item === val).length;
}
// 相当于
function count(arr,item){
   let newArr = arr.filter(val => {
      return val = item;
   });
   return newArr.length;
}

利用map重组数组实现计数

返回每次函数调用的结果组成的数组

function count(arr,item){
   var count = 0;
   arr.map(function (i){
      if( i === item){
         count++;
      }
   });
   return count;
}

for循环实现计数

function count(arr,item){
   var count = 0;
   for(var i = 0; i < arr.length; i++){
       if(arr[i] === item){
          count++;
       }
   }
   return count;
}

reduce实现计数

从数组第一项开始,遍历到最后

function count(arr,item){
    var count = arr.reduce(function (pre,cur){
        return cur === item ? pre + 1 : pre;
    },0);
    return count;
}

forEach实现计数

function count(arr,item){
   var count = 0;
   arr.forEach(function (a){
      a === item ? count : 0;
   });
   return count;
}
function count(arr,item){
   var count = 0;
   arr.forEach(function (a){
       (a ^ item) || ++count;
   });
   return count;
}

toString+match实现计数

function count(arr,item){
   return arr.toString().match(new RegExp(item,"g")).length;
}

indexOf实现计数

function count(arr,item){
   var index = arr.indexOf(item);
   var num = 0;
   while(index != -1){
       num++;
       index = arr.indexOf(item,index + 1)
   }
   return num
}

字符串计数

function count(str,item){
   var reg = new RegExp("" + item + "","g");
   var newStr = str.join("");
   var strNum = newStr.match(reg);
   return strNum.length;
}
function count(str,item){
    return str.join(""),split(item).length - 1;
}