猿问

如何在不使用 filter() 的情况下过滤数组?

目标是遍历外循环,然后遍历内循环。之后,我们需要过滤作为“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)); 

这个逻辑有什么问题?


繁花不似锦
浏览 218回答 4
4回答

慕斯709654

如果你想要多维数组作为结果function filteredArray(arr, elem) {&nbsp; &nbsp; let newArr = [];&nbsp;&nbsp;&nbsp; &nbsp; for (var i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; let subArray=[];&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; for (var j = 0; j < arr[i].length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; if (arr[i][j] !==elem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subArray.push(arr[i][j]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; newArr.push(subArray)&nbsp; &nbsp; }&nbsp;&nbsp;&nbsp; &nbsp; return newArr;&nbsp; }&nbsp;&nbsp;&nbsp; console.log((filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)));如果你想要平面阵列作为结果&nbsp; &nbsp; function filteredArray(arr, elem) {&nbsp; &nbsp; &nbsp; let newArr = [];&nbsp; &nbsp; &nbsp; for (var i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; for (var j = 0; j < arr[i].length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (arr[i][j] !==elem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newArr.push(arr[i][j]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; return newArr;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; console.log((filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)));

30秒到达战场

不使用filter方法,但如果可以使用map,reduce将简化,可以避免使用索引处理。const filteredArray = (arr, elem) =>&nbsp; arr.map((data) =>&nbsp; &nbsp; data.reduce((acc, cur) => (cur !== elem && acc.push(cur), acc), [])&nbsp; );console.log(&nbsp; filteredArray(&nbsp; &nbsp; [&nbsp; &nbsp; &nbsp; [3, 2, 3],&nbsp; &nbsp; &nbsp; [1, 6, 3],&nbsp; &nbsp; &nbsp; [3, 13, 26],&nbsp; &nbsp; &nbsp; [19, 3, 9],&nbsp; &nbsp; ],&nbsp; &nbsp; 3&nbsp; ));如果您需要平面数组,只需更改map为flatMap上面的代码。const filteredFlatArray = (arr, elem) =>&nbsp; arr.flatMap((data) =>&nbsp; &nbsp; data.reduce((acc, cur) => (cur !== elem && acc.push(cur), acc), [])&nbsp; );console.log(&nbsp; filteredFlatArray(&nbsp; &nbsp; [&nbsp; &nbsp; &nbsp; [3, 2, 3],&nbsp; &nbsp; &nbsp; [1, 6, 3],&nbsp; &nbsp; &nbsp; [3, 13, 26],&nbsp; &nbsp; &nbsp; [19, 3, 9],&nbsp; &nbsp; ],&nbsp; &nbsp; 3&nbsp; ));

繁星coding

更正i <= arr.length=>i < arr.lengtharr.indexOf(elem)=>arr[i].indexOf(elem)function filteredArray(arr, elem) {&nbsp; let newArr = [];&nbsp; for (var i = 0; i < arr.length; i++) {&nbsp; &nbsp; for (var j = 0; j < arr[i].length; j++) {&nbsp; &nbsp; &nbsp; if (arr[i].indexOf(elem) != -1) {&nbsp; &nbsp; &nbsp; &nbsp; newArr.push(arr[i]);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; }&nbsp; return newArr;}console.log(JSON.stringify(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)));&nbsp;

慕娘9325324

这个逻辑有什么问题?1-您需要在访问它们之前声明空子数组。newArr[i] = [];2-如果未找到 elem,则要推送整个数组(我假设是为了节省时间),请纠正条件或放入其他内容。newArr.push(arr[i]); but you should use this&nbsp;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].length5-您缺少极端情况。console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 5, 9], [3, 3, 3]], 3) );function filteredArray(arr, elem) {&nbsp; const newArr = [];&nbsp; let skip = 0;&nbsp; for (var i = 0; i < arr.length; i++) {&nbsp; &nbsp; newArr[i] = [];&nbsp; &nbsp; skip = arr[i].indexOf(elem);&nbsp; &nbsp; for (var j = 0; j < arr[i].length; j++) {&nbsp; &nbsp; &nbsp; if (skip !== -1) {&nbsp; &nbsp; &nbsp; &nbsp; if (arr[i][j] !== elem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newArr[i].push(arr[i][j]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; newArr[i] = arr[i];&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; }&nbsp; return newArr;}console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 5, 9], [3, 3, 3]], 3));&nbsp;
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答