【问题标题】:Matching an objects 2 dimensional array using includes() in Javascript在Javascript中使用includes()匹配对象二维数组
【发布时间】:2017-12-11 22:41:03
【问题描述】:

我正在尝试将用户输入数组(this.scoreO 或 this scoreX)数组与 this.winningBoard 数组进行匹配,但不是精确值。这些值可能不按顺序排列,即使“分数”数组中有更多值,我也想匹配三个集合。

例如,也许

this.scoreO = [9,5,2,1]

我希望它触发与 [1,5,9] 的匹配,请参见下面的数组

this.winningBoard = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[3,5,7],**[1,5,9]**]

代码如下:

function Game (player) {

this.winningBoard = [
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [1,4,7],
    [2,5,8],
    [3,6,9],
    [3,5,7],
    [1,5,9]
]   
this.scoreO = [];
this.scoreX = [];

}

Game.prototype.findWinner2 = function() {

for(i = 0; i < this.winningBoard.length; i++) {

    if (this.winningBoard[i].includes(this.scoreO) === true) {

        //display player 1 "O" is the winner


    } else if (this.winningBoard[i].includes(this.scoreX) === true) {

        //display player 2 "X" is the winner


    } 
}
}

我不断得到错误的结果。

【问题讨论】:

    标签: javascript arrays oop


    【解决方案1】:

    您可以结合使用 someeveryincludes(如果您可以使用 es6)来做到这一点:

    var winningBoard = [
      [1,2,3],
      [4,5,6],
      [7,8,9],
      [1,4,7],
      [2,5,8],
      [3,6,9],
      [3,5,7],
      [1,5,9],
    ];
    
    var score0 = [9,5,2,1];
    
    console.log(winningBoard.some(board => board.every(x => score0.includes(x))))

    您可以将其解读为:查看winningBoard 中是否有一些 元素,这样对于该元素中的每个 项,score0 包含 那个项目。

    编辑:一些补充说明(由内而外):

    x =&gt; score0.includes(x)

    如果数组score0x 作为一个元素,这个函数会返回true。这个非常简单。在这种情况下,x 只是一个数字。

    board =&gt; board.every(x =&gt; score0.includes(x))

    every 仅当它的回调对数组的每个 元素都为真时才返回真。因此,由于board 是您的中奖号码数组之一(例如:[1,5,9]),如果该板中的每个号码都包含在score0.

    最后:winningBoard.some(board =&gt; board.every(x =&gt; score0.includes(x)))

    some,有点像every 的倒数,如果回调函数对任何 个数组元素返回true,则返回true。因此,如果任何板子的所有元素都包含在 score0 中,这是正确的,这正是您要检查的条件。

    最后:语法x =&gt; x*2 是写function(x) { return x*2 } 的简写(有一些范围差异,这里不重要)。你可以阅读箭头函数here

    【讨论】:

    • 哇,谢谢 Crice。效果很好。如果你能解释得更深入一点,那就太好了。它有效,但我不完全理解你对 board 和 x 做了什么(这些是箭头函数?)
    • @Leslie 我编辑了帖子以包含一些额外的解释(我承认我最初认为有些事情是理所当然的)。如果还有什么不清楚的地方,请不要犹豫,要求进一步澄清。很高兴我能帮上忙。谢谢!
    • 你摇滚@CRice!非常有帮助 - 非常感谢!我试图支持你,但我仍然是一个名声太低的π介子。
    • @Leslie 如果这回答了您的问题并让您满意,我将非常感谢您接受并投票。 ;) 即使不影响可见分数,您仍然应该能够以低代表投票。
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2013-01-02
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多