亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不使用 filter() 的情況下過濾數組?

如何在不使用 filter() 的情況下過濾數組?

繁花不似錦 2022-11-11 15:04:36
目標是遍歷外循環,然后遍歷內循環。之后,我們需要過濾作為“elem”傳遞的參數。新數組 (newArr) 應該返回一個沒有“elem”元素的數組。function filteredArray(arr, elem) {  let newArr = [];  for(var i = 0; i<= arr.length; i ++){  for(var j = 0; j<=arr[i].length ; j++){      if(arr.indexOf(elem)!= -1){        newArr.push(arr[i]);      }  }}    return newArr;}console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)); 這個邏輯有什么問題?
查看完整描述

4 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

如果你想要多維數組作為結果


function filteredArray(arr, elem) {

    let newArr = [];

  

    for (var i = 0; i < arr.length; i++) {

      let subArray=[];  

      for (var j = 0; j < arr[i].length; j++) {

        if (arr[i][j] !==elem) {

          subArray.push(arr[i][j]);

        }

      }

      newArr.push(subArray)

    }

  

    return newArr;

  }

  

  console.log((filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)));


如果你想要平面陣列作為結果


    function filteredArray(arr, elem) {

      let newArr = [];


      for (var i = 0; i < arr.length; i++) {

        for (var j = 0; j < arr[i].length; j++) {

          if (arr[i][j] !==elem) {

            newArr.push(arr[i][j]);

          }

        }

      }

    

      return newArr;

    }

    

    console.log((filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)));


查看完整回答
反對 回復 2022-11-11
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

不使用filter方法,但如果可以使用map,reduce將簡化,可以避免使用索引處理。


const filteredArray = (arr, elem) =>

  arr.map((data) =>

    data.reduce((acc, cur) => (cur !== elem && acc.push(cur), acc), [])

  );


console.log(

  filteredArray(

    [

      [3, 2, 3],

      [1, 6, 3],

      [3, 13, 26],

      [19, 3, 9],

    ],

    3

  )

);


如果您需要平面數組,只需更改map為flatMap上面的代碼。


const filteredFlatArray = (arr, elem) =>

  arr.flatMap((data) =>

    data.reduce((acc, cur) => (cur !== elem && acc.push(cur), acc), [])

  );


console.log(

  filteredFlatArray(

    [

      [3, 2, 3],

      [1, 6, 3],

      [3, 13, 26],

      [19, 3, 9],

    ],

    3

  )

);


查看完整回答
反對 回復 2022-11-11
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

更正


i <= arr.length=>i < arr.length

arr.indexOf(elem)=>arr[i].indexOf(elem)

function filteredArray(arr, elem) {

  let newArr = [];


  for (var i = 0; i < arr.length; i++) {

    for (var j = 0; j < arr[i].length; j++) {


      if (arr[i].indexOf(elem) != -1) {

        newArr.push(arr[i]);

      }

    }

  }


  return newArr;

}


console.log(JSON.stringify(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3))); 


查看完整回答
反對 回復 2022-11-11
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

這個邏輯有什么問題?


1-您需要在訪問它們之前聲明空子數組。


newArr[i] = [];

2-如果未找到 elem,則要推送整個數組(我假設是為了節省時間),請糾正條件或放入其他內容。


newArr.push(arr[i]); but you should use this 

newArr[i] = arr[i]; because i created new empty sub arrays.

3-您需要實際使用 j 來遍歷子數組。


newArr[i].push(arr[i][j]);

4-已經回答,但你需要檢查你沒有超出數組。


i < arr.length j < arr[i].length


5-您缺少極端情況。


console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 5, 9], [3, 3, 3]], 3) );


function filteredArray(arr, elem) {

  const newArr = [];

  let skip = 0;


  for (var i = 0; i < arr.length; i++) {

    newArr[i] = [];

    skip = arr[i].indexOf(elem);

    for (var j = 0; j < arr[i].length; j++) {

      if (skip !== -1) {

        if (arr[i][j] !== elem) {

          newArr[i].push(arr[i][j]);

        }

      } else {

        newArr[i] = arr[i];

        break;

      }

    }

  }


  return newArr;

}


console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 5, 9], [3, 3, 3]], 3)); 



查看完整回答
反對 回復 2022-11-11
  • 4 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號