【发布时间】:2017-03-26 00:26:48
【问题描述】:
我正在寻找在数组数组中搜索包含给定数组元素的数组实例的最佳方法。
现在,我明白这是一条令人困惑的路线。所以这里有一个例子来说明这个场景。
我有一个搜索集,它是一个包含 9 个项目的数组,代表一个由 9 个单元组成的游戏板。这些值可以是1、0 或null:
var board = [1, 0, 1, 1, 0, 1, 0, 0, null];
我还有一个结果集,就是一个数组数组:
var winningCombos = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]
winningCombo 中的每个数组代表board 数组中的指数,它们是获胜组合。
有 8 种获胜组合。
每个获胜组合是一组 3 个指数,如果它们的值都为 1,那将获胜。
即要获胜,董事会可能是:
board = [1,1,1,0,0,0,null,null,0]; // Index 0,1, and 2 are 1, matching winningCombos[0]
或
board = [null,null,1,0,1,0,1,null,0]; // Index 2,4, and 6 are 1, matching winningCombos[7]
我的问题是:
Javascript 中执行此操作的方式是什么(可能使用 ES6)?
到目前为止,我想出的是:
const win = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];
let board = [null,null,1,0,1,0,1,null,0];
let score = [];
board.forEach(function(cell, index)
{
if(cell === 1)
score.push(index);
});
console.log(score);
console.log(win.indexOf(score) > -1)
但我很难在 数组数组 中找到 数组。尽管score 是[2,4,6] 并且这个确切的数组存在于win 中,但它并没有显示在结果中,因为我假设对象相等在Javascript 中的工作方式。
简而言之,我正在尝试查看score 是否存在于win 中
我找到了this 解决方案,但它看起来很老套。有没有更好的方法来处理这个问题?
【问题讨论】:
-
board数组如何对应win数组?为什么win有八个索引,8有.length,board有九个索引,9有.length? -
我了解 board 和winningCombos,但无法弄清楚您到底想要计算什么。您是否想弄清楚 win 中是否存在分数?
-
@guest271314:板阵列是一个由 9 个单元组成的阵列。获胜数组是所有可能获胜的 3 个单元格组合的索引数组,当它们的值为 1 时。我也会将此添加到问题中
-
@skav 是的。简而言之,是的。我也会将其添加到问题中
-
下面的好答案 - 但如果你想要一个数组相等的通用例程,请参阅:stackoverflow.com/questions/7837456/…
标签: javascript arrays search arrayofarrays