【问题标题】:How to return an array with even number inside a two dimension array?如何在二维数组中返回偶数数组?
【发布时间】:2021-02-10 14:05:30
【问题描述】:

我正在尝试编写一个接收二维数组的函数,并且必须返回仅包含偶数的向量。不应该复制偶数数组,只是看看所有数字是否都是偶数并返回它。

var table = [ [1,2,3,4], [1,4,2,1], [9,9,9,9], [2,4,6,8] ] // -> [2,4,6,8]

我不确定 if 条件和循环内的返回,但这就是我所拥有的:

var getTable=function(arr) {
  for(var i=0; i<arr.length; i++) {
    for(var j=0; j<arr[i].length; j++) {
      if((arr[i][j]%2)===0) {
        return arr[i][j];
      }
    }
  }
}

谢谢。

【问题讨论】:

  • 该代码将返回它找到的第一个偶数元素,即 2。您需要return arr.filter(iArr =&gt; iArr.every(e =&gt; e % 2 === 0)),这将删除所有不包含所有偶数的数组。
  • 这个任务最合适的Array函数大概是Array#find
  • @ChrisG,谢谢你的回答。我觉得这就是。我只是在实现它时遇到了麻烦(这是我的第一周编码)。我不完全理解语法。什么是艾瑞?我正在尝试使用 return arr.filter(arr[i] =&gt; arr[i][j].every(e =&gt; e % 2 === 0)) 。但我收到错误 Malformed arrow function parameter list
  • 我使用了一个短箭头形式(并在里面嵌套了一个 .every 调用),但你也可以传递function (iArr) { return someBooleanExpression; }iArr 是“内部数组”的缩写;理解它在这里如何工作的关键概念是,通常,你调用一个现有的函数,并提供你自己的参数,比如alert("hello")。但是,在这里,您提供了 function,因此您只需根据自己的喜好命名参数,然后对它们执行一些操作。更长的解释:jsfiddle.net/khrismuc/xz6y51db
  • 我不确定你在问什么?你看过我之前评论中的小提琴吗?从第 19 行开始,有三个示例说明如何执行此操作,每个示例都使用逐渐缩短的语法。第 20-24 行应该正是您要查找的内容,不是吗?你是什​​么意思“你还没有弄清楚”?还没弄清楚什么,究竟是什么?非常基本的find() 示例:jsfiddle.net/orfwtmL6

标签: javascript loops multidimensional-array nested


【解决方案1】:

对于初学者来说,你做得很好。
让我们在检查每一行时使用一个标志。
我们假设所有单元格都是偶数,除非遇到奇数单元格。
我们告诉单元格for 循环在奇数单元格上尽早完成(有点“高级”)。
仅当标志仍为 true 时,我们才返回该行。
如果行 for 循环完成,则找不到所有偶数行 - 记录一条消息并返回一个空数组 ([])。

上面,我总结了我在下面的代码中编写的 cmets。

var table = [[1, 2, 3, 4], [1, 4, 2, 1], [9, 9, 9, 9], [2, 4, 6, 8]];

function getEvenRow(arr) {
  var allEven; // flag
  for (var i = 0; i < arr.length; i++) {
    allEven = true; // set flag to true before each row
    // stop checking row on first not even cell
    for (var j = 0; j < arr[i].length && allEven; j++) {
      if ((arr[i][j] % 2) != 0) { // check if *not* even
        allEven = false; // not even: set flag to false
      }
    }
    if (allEven) { // was the row all even
      return arr[i]; // it was: return it (function terminates)
    }
  }
  // if we got here, none are all even.  javascript will automatically return `undefined`
  // you can console.log a message before that and return an empty array - like this:
  console.log("getEvenRow says: All even row not found");
  return [];
}

// console.log(getEvenRow(table));
// using this modification for S.O. snippet:
console.log(JSON.stringify(getEvenRow(table)));
console.log("-".repeat(40)); // just to separate the outputs

var table2 = [[1, 2, 3, 4], [1, 4, 2, 1], [9, 9, 9, 9], [2, 4, 6, 111]];

console.log(JSON.stringify(getEvenRow(table2)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多