首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中映射3x3网格

在javascript中映射3x3网格
EN

Stack Overflow用户
提问于 2018-10-08 02:49:20
回答 1查看 347关注 0票数 -1

在练习理解数组以及如何遍历数组时,我编写了一个函数来将每行、每列和两条对角线映射到它们自己的键值对中。

有没有一种更有效的循环方式?我知道使用两个for循环是不好的做法,因为如果网格大于3x3,这会导致很高的复杂性。

代码语言:javascript
复制
let board = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
];

const mapper = board => {
  let
  map = {}, 
  d1 = [],
  d2 = [];

  for (let i = 0; i < board.length; i++) {
    let tmp = [];
    // get all rows
    map[`R${i}`] = board[i];

    // get second diagonals
    d2.push(board[i][board.length-1-i]);

    for (let j = 0; j < board.length; j++) {
      // get all columns
      tmp.push(board[j][i]);

      // get first diagonals
      if (i === j) {
        d1.push(board[i][j])
      }
    }
    
    map[`C${i}`] = tmp;
  }

  map[`D1`] = d1;
  map[`D2`] = d2;

  return map;
}

console.log(mapper(board));

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 03:12:32

下面的内容可以说更加清晰,并且可以通过使用reduce来进一步改进。

代码语言:javascript
复制
board = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
];

diag = 0; map = {}

board.forEach((row,r,arr) => {
	var rows = arr.length-1; 
	map['R'+r] = row; 
	map['D'+1] = map['D'+1] || [];
	map['D'+2] = map['D'+2] || [];
	map['D'+1][diag] = row[diag];
	map['D'+2][rows-diag] = row[rows-diag]
	diag++;
	row.forEach((col,c) => { 
		map['C'+c] = map['C'+c] || []; 
		map['C'+c].push(col);
		
	}); 
});

console.log(map);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52691753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档