牛客刷題(不想更了)

1.找出元素 item 在給定數組 arr 中的位置數組

function indexOf(arr, item) {
  //先判斷當前瀏覽器是否支持indexOf方法
  if (Array.prototype.indexOf){
      return arr.indexOf(item);
  } else {
      for (var i = 0; i < arr.length; i++){
          if (arr[i] === item){
              return i;
          }
      }
  }     
  return -1;
}
複製代碼

2.計算給定數組 arr 中全部元素的總和瀏覽器

2.1 普通玩家版bash

function sum(arr) {
    let res = 0;
    for(let i=0;i<arr.length;i++){
        res += arr[i];
    }
    return res;
}
複製代碼

2.2 forEach版本app

function sum(arr) {
    let res = 0;
    arr.forEach(function (curr,index,arr) {
        res += curr;
    });
    return res;
}
console.log(sum([1, 2, 3, 4, 5])); //15
複製代碼

注意點:forEach() 爲每一個數組元素執行callback函數;不像 map() 或者 reduce(),它老是返回 undefined 值,而且不可鏈式調用。函數

function sum(arr) {
    let res = 0;
    arr.forEach(function (curr,index,arr) {
        return res += curr;
    });
}
console.log(sum([1, 2, 3, 4, 5])); //返回undefined
複製代碼

2.3 ES6玩家版ui

function sum(arr) {
    return arr.reduce((prev,curr) => prev + curr,0)
}
//調試部分
console.log(sum([1, 2, 3, 4])); //10
複製代碼

3.移除數組 arr 中的全部值與 item 相等的元素。不要直接修改數組 arr,結果返回新的數組spa

3.1 菜雞(我寫的)版本prototype

若是數組中的元素不和item相等,把數組元素添加到新的數組中調試

function remove(arr, item) {
    let res = [];
    for(let i=0;i<arr.length;i++){
        if(arr[i] !== item){
            res.push(arr[i]);
        }
    }
    return res;
}
複製代碼

3.2 菜雞版本的另外一種實現code

若是數組中的元素和item相等,就再也不往下執行代碼

function remove(arr, item) {
    let res = [];
    for(let i=0;i<arr.length;i++){
       if(arr[i] === item) continue;
       res.push(arr[i]);
    }
    return res;
}
複製代碼

3.3 slice&splice混用

  • 題意要求不要直接修改數組arr,結果返回新的數組;slice()方法可用於截取字符串,且返回的是截取內容(新的數組),咱們能夠傳遞參數0截取所有元素
  • 不能夠直接使用賦值的方式拷貝一個數組,會致使更改一個數組的元素另一個數組也會跟着改變的狀況
  • 在新的數組上進行操做,利用splice()切割數組,splice()會改變原數組
function remove(arr, item) {
    let newArr = arr.slice(0); //
    for(let i=0;i<newArr.length;i++){
        if(newArr[i] === item){
            newArr.splice(i,1);
            i--;
        }
    }
    return newArr;
}
複製代碼

3.4 ES6玩家版(別人寫的)

filter() 方法建立一個新的數組,新數組中的元素是經過檢查指定數組中符合條件的全部元素。返回 返回true的項組成的數組

function remove(arr,item){
    return arr.filter(ele => ele !== item);
}
複製代碼

4.移除數組 arr 中的全部值與 item 相等的元素,直接在給定的 arr 數組上進行操做,並將結果返回

4.1 直接在給定的數組上操做,則可使用splice()方法,注意splice()方法刪除元素後,數組長度也變化了,須要執行i--避免跳過元素。

function removeWithoutCopy(arr, item) {
    for(let i=0;i<arr.length;i++){
        if (arr[i] === item){
            arr.splice(i,1);
            i--;
        }
    }
    return arr;
}
複製代碼

4.2 倒着刪除,不用考慮數組長度變化

function removeWithoutCopy(arr, item) {
    for(let i=arr.length-1;i>=0;i--){
        if(arr[i] === item){
            arr.splice(i,1);
        }
    }
    return arr;
}
複製代碼

5.在數組 arr 末尾添加元素 item。不要直接修改數組 arr,結果返回新的數組

5.1 利用slice()建立一個新數組,利用push添加到最末尾

function append(arr, item) {
    let newArr = arr.slice(0);
    newArr.push(item);
    return newArr;
}
複製代碼

5.2 利用slice()建立一個新數組,數組[數組長度] = 新元素

function append(arr, item) {
    let newArr = arr.slice(0);
    newArr[newArr.length] = item;
    return newArr;
}
複製代碼

5.3 建立一個新的空數組,for循環依次添加

function append(arr, item){
   let newArr = [];
   for(let i=0;i<arr.length;i++){
       newArr.push(arr[i]);
   }
   newArr.push(item);
   return newArr;
}
複製代碼

5.4 利用concat()直接鏈接起來

function append(arr, item) {
   return arr.concat(item);
}
複製代碼

6.刪除數組 arr 最後一個元素。不要直接修改數組 arr,結果返回新的數組

6.1

function truncate(arr, item) {
    let newArr=[];
    for(var i=0;i<arr.length-1;i++){
        newArr.push(arr[i]);
    }
    return newArr;
}
複製代碼

6.2

function truncate(arr) {
    return arr.slice(0,-1);
}
複製代碼

6.3 利用filter

//利用filter
function truncate(arr) {
    return arr.filter(function(v,i,ar) {
        return i!==ar.length-1;
    });
}
複製代碼

6.4

function truncate(arr) {
    let newArr = arr.concat();
    newArr.pop();
    return newArr;
}
複製代碼

6.5

//利用push.apply+pop
function truncate(arr) {
    let newArr=[];
    [].push.apply(newArr, arr); 
    newArr.pop();
    return newArr;
}
複製代碼

6.6 注意:每一個元素的數據類型會變成字符型

function truncate(arr) {
    var newArr = arr.join().split(',');
    newArr.pop();
    return newArr;
}
複製代碼
相關文章
相關標籤/搜索