Cách tránh vòng lặp for lồng nhau trong javascript

Các vòng lặp lồng nhau có vị trí của chúng trong quá trình phát triển, nhưng nếu bạn không cẩn thận, chúng có thể dẫn đến suy giảm hiệu suất nghiêm trọng do vòng lặp bên trong sẽ chạy một số lần nhất định, nhân với số lần vòng lặp bên ngoài chạy.

Thường có thể tránh phải chạy một vòng lặp lồng nhau, thay vào đó là chạy hai vòng lặp riêng biệt [có nghĩa là mỗi vòng lặp sẽ chỉ chạy một số lần nhất định]

Hãy xem xét đoạn mã sau

var innerGR; var results = [];  var outerGR = new GlideRecord['table_name']; outerGR.query[]; while [outerGR.next[]] {     innerGR = new GlideRecord['other_table_name'];     innerGR.addQuery['field', outerGR.getValue['something_to_compare']];     innerGR.query[];  while [innerGR.next[]] ...

fn

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
4 lặp qua một bảng
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
5 mô phỏng, tìm tất cả các chỉ mục của một giá trị nhất định, sau đó lặp qua tất cả các kết hợp chiến thắng có thể có, tìm bất kỳ chỉ mục nào có giá trị thực bằng với chỉ mục từ vòng lặp đầu tiên, [tôi biết. /] sau đó thay thế giá trị bằng giá trị được truyền vào hàm [x hoặc o]

Sau đó, một hàm tiếp theo được chạy để kiểm tra xem mọi giá trị bên trong bất kỳ mảng lồng nhau nào bên trong

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
6 đều bằng nhau. Nếu đúng, một người chiến thắng được tìm thấy

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going

Nó chỉ có hai hàm nên code không nặng lắm nhưng tôi cảm thấy như

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
4 sẽ không đạt điểm cao trên bảng xếp hạng hiệu suất do vòng lặp lồng nhau. Mọi đề xuất về một số cải tiến sẽ rất tuyệt

Nếu bạn gặp khó khăn trong việc hiểu thử thách Nesting For Loops của freeCodeCamp, đừng lo lắng. Chúng tôi đã hỗ trợ bạn

Trong bài toán này, bạn phải hoàn thành hàm

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
7 và lấy một mảng nhiều chiều làm đối số. Hãy nhớ rằng mảng nhiều chiều, đôi khi được gọi là mảng 2D, chỉ là một mảng của các mảng, ví dụ:
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
8

Trong trình chỉnh sửa bên phải,

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
7 được định nghĩa như sau

function multiplyAll[arr] {
  var product = 1;
  // Only change code below this line

  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];

Bạn cần hoàn thành hàm để nó nhân biến

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0 với mỗi số trong các mảng con của tham số
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
1, là một mảng nhiều chiều

Có rất nhiều cách khác nhau để giải quyết vấn đề này, nhưng chúng tôi sẽ tập trung vào phương pháp đơn giản nhất bằng cách sử dụng vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2

Thiết lập vòng lặp
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 của bạn

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
1 là mảng nhiều chiều nên bạn sẽ cần hai vòng lặp
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2. một để lặp qua từng mảng của mảng con và một để lặp qua các phần tử trong mỗi mảng con

Lặp qua các mảng bên trong

Để làm điều này, hãy thiết lập vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 giống như bạn đã thực hiện trong các thử thách trước

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];

Lưu ý rằng chúng tôi đang sử dụng

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
7 thay vì
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
8 cho vòng lặp và để khai báo
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0. Trong thử thách này, bạn sẽ không nhận thấy sự khác biệt giữa hai loại, nhưng nhìn chung, nên sử dụng
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
70 và
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
7 của ES6 bất cứ khi nào bạn có thể. Bạn có thể đọc thêm về lý do tại sao trong bài viết này

Bây giờ hãy ghi từng mảng con vào bảng điều khiển

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];

Bởi vì bạn đang gọi

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
7 với
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
73 ở dưới cùng, bạn sẽ thấy như sau

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
7

Lặp qua các phần tử trong mỗi mảng con

Bây giờ bạn cần lặp qua từng số trong các mảng phụ mà bạn vừa đăng nhập vào bảng điều khiển

Xóa

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
74 và tạo một vòng lặp
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 khác bên trong vòng lặp bạn vừa viết

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
5

Hãy nhớ rằng, đối với vòng lặp bên trong, chúng ta cần kiểm tra

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
76 của
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
77 vì
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
77 là một trong những mảng con mà chúng ta đã xem xét trước đó

Bây giờ hãy đăng nhập

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
79 vào bảng điều khiển để xem từng phần tử riêng lẻ

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
1

Cuối cùng, nhân

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0 với mọi phần tử trong mỗi mảng con

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
3

Nếu bạn đăng nhập

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0 vào bảng điều khiển, bạn sẽ thấy câu trả lời đúng cho từng trường hợp thử nghiệm

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
5
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
6

Xem kỹ hơn

Nếu bạn vẫn không chắc tại sao đoạn mã trên hoạt động, đừng lo lắng – bạn không đơn độc đâu. Làm việc với các vòng lặp lồng nhau rất phức tạp và ngay cả những nhà phát triển có kinh nghiệm cũng có thể bị nhầm lẫn

Trong những trường hợp như thế này, sẽ rất hữu ích nếu bạn ghi lại nội dung nào đó chi tiết hơn vào bảng điều khiển. Quay lại mã của bạn và đăng nhập

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
52 vào bảng điều khiển ngay trước vòng lặp
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 bên trong

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
0

Trong vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 bên ngoài, mỗi lần lặp đi qua các mảng con trong
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
1. Bạn sẽ thấy điều này trong bảng điều khiển

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
1

Lưu ý rằng chúng tôi đang sử dụng chữ mẫu ở trên.

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
52 giống như
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
57, chỉ dễ viết hơn nhiều

Bây giờ trong vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 bên trong, đăng nhập
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
59 vào bảng điều khiển

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2

Vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 bên trong đi qua từng phần tử trong mỗi mảng con [
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
77], vì vậy bạn sẽ thấy điều này trong bảng điều khiển

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
3

Lần lặp đầu tiên của

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
02 lấy mảng con đầu tiên,
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
03. Sau đó, lần lặp đầu tiên của
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
04 đi qua từng phần tử trong mảng con đó

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
4

Ví dụ này khá đơn giản, nhưng

const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
79 vẫn có thể khó hiểu nếu không ghi nhiều thứ vào bảng điều khiển

Một cải tiến nhanh chóng mà chúng ta có thể thực hiện là khai báo một biến

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
06 trong vòng lặp
function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 bên ngoài và đặt nó bằng
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
77

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
5

Sau đó, chỉ cần thực hiện một vài điều chỉnh mã để sử dụng biến

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
06 mới thay vì
const possibleWinCombos = [
  [0, 1, 2], //================ //
  [3, 4, 5],  //== Horizontal == //
  [6, 7, 8],  //=================//

  [0, 3, 6],  //================ //
  [1, 4, 7],  //== Vertical == //
  [2, 5, 8],  //=================//
  
  [0, 4, 8],  //=================//
  [2, 4, 6],  //== Diagonal == //
]

const ticTacToe = [
  'x', 'o', null,
  null, 'x', null,
  'o', null, 'x',
]

const game = [value] => {
  ticTacToe.forEach[[cell, idxOfCell] => {
    if[cell === value]{
      for [winCombo of possibleWinCombos]{
        let idxToReplace = winCombo.indexOf[idxOfCell] 
        winCombo.splice[idxToReplace, 1, value]
      }     
    }
  }]
  
  checkForWinner[value] ? 
    console.log[`${value}'s win`] : console.log['game still going']
}

const checkForWinner = [value] => {
  return possibleWinCombos.some[[winCombo] => {
    return winCombo.every[[winComboValue] => winComboValue === value];
  }]  
}

game['x'] // x's win
game['o'] // game still going
77

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
6

Đó sẽ là mọi thứ bạn cần biết về mảng nhiều chiều và vòng lặp

function multiplyAll[arr] {
  let product = 1;
  // Only change code below this line
  for [let i = 0; i < arr.length; i++] {
    console.log[arr[i]];
  }
  // Only change code above this line
  return product;
}

multiplyAll[[[1,2],[3,4],[5,6,7]]];
2 lồng nhau. Bây giờ hãy ra khỏi đó và lặp lại với những gì tốt nhất của chúng

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Nếu bài viết này hữu ích, hãy tweet nó

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Bạn có nên tránh các vòng lặp lồng nhau không?

Vòng lặp lồng nhau có vị trí của chúng trong quá trình phát triển, nhưng nếu bạn không cẩn thận, chúng có thể dẫn đến suy giảm hiệu suất nghiêm trọng do vòng lặp bên trong sẽ chạy một số lượng nhất định . .

Các vòng lặp lồng nhau có phải JavaScript xấu không?

Lặp lại lồng nhau không nhất thiết là điều xấu . Ngay cả nhiều thuật toán nổi tiếng cũng dựa vào chúng. Nhưng bạn phải cực kỳ thận trọng với những gì bạn thực hiện trong vòng lặp sâu nhất, vì các lệnh này sẽ được thực hiện rất thường xuyên. Lưu câu trả lời này.

Vòng lặp hiệu quả nhất trong JavaScript là gì?

Trong trường hợp vòng lặp lặp lại nhiều lần và kích thước của mảng quá lớn, thì vòng lặp for được ưu tiên là nhanh nhất .

Break có dừng tất cả các vòng lặp JavaScript không?

Từ khóa ngắt Javascript khiến vòng lặp hoặc câu lệnh phân nhánh bị chấm dứt ngay lập tức .

Chủ Đề