检查并比较2个数组

时间:2018-02-12 04:22:33

标签: javascript arrays

function calWinner(arr) {
  //winning combination
  const winningIds = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6],
  ]

  for (let i = 0; i < winningIds.length; i++) {
    calculate(arr, winningIds[i])
  }
}

function calculate(sup, sub) {
  sup.sort()
  sub.sort()
  let i = 0
  let j = 0
  for (i, j; i < sup.length && j < sub.length;) {
    if (sup[i] < sub[j]) {
      ++i
    } else if (sup[i] == sub[j]) {
      ++i, ++j
    } else {
      return false
    }
  }
  return j == sub.length;
}


calWinner([1, 3, 7, 4])

我正在尝试编写一个接受数组的函数,并检查它是否在函数内部的对象中的嵌套数组中有每个元素。

我添加了一个我从post找到的函数,但不确定为什么我得到的是undefined而不是true。

1 个答案:

答案 0 :(得分:2)

假设你想要返回true,如果来自winsIds的任何数组在arr中,这就是代码:

function calWinner(arr) {
  //winning combination
  const winningIds = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6],
  ]

  var containsWinner = false;

  for (let i = 0; i < winningIds.length && !containsWinner; i++) {
     containsWinner = calculate(arr, winningIds[i])
  }

  return containsWinner;
}

function calculate(sup, sub) {
  sup.sort()
  sub.sort()

  for (var i = 0; i < sub.length; i++) {
    if (sup.indexOf(sub[i]) == -1) {
        return false;
    }
  }
  return true;
}

calWinner([1, 3, 7, 4]);