【问题标题】:How do I match pairs in a 2 dimensional array in JavaScript?如何在 JavaScript 中匹配二维数组中的对?
【发布时间】:2018-12-16 23:24:41
【问题描述】:

我有一个包含数字对的数组,需要在数组中找到匹配的数字对

numberStore = [ [0,0],[1,1],[1,2],[1,3],[1,4],[1,5]... ]

我希望能够找到1,4。有没有办法在不依赖numberStore[4]的情况下找到这个数组?

【问题讨论】:

  • 您需要多久执行一次此搜索?
  • numberStore.find(([a, b]) => a === 1 && b === 4)?以同样的方式使用map 来更新需要的元素
  • 另外,“查找” 是什么意思?您想要索引还是只知道该对是否存在?这对的顺序重要吗?
  • 需要经常进行搜索,需要知道是否存在

标签: javascript arrays multidimensional-array


【解决方案1】:

由于您需要经常执行此搜索,因此我将构建一个哈希集以避免一遍又一遍地映射和搜索。例如

const numberStore = [ [0,0],[1,1],[1,2],[1,3],[1,4],[1,5] ]

const hashedSet = new Set(numberStore.map(pair => pair.toString()))
// looks like ["0,0", "1,1", "1,2", "1,3", etc]
console.log([...hashedSet])

const search = (find) => {
  return hashedSet.has(find.toString())
}

console.info('Find [1,4]', search([1,4]))
console.info('Find [4,1]', search([4,1]))

我使用 Array.prototype.toString() 作为散列函数,但您可以替换其中的任何内容,为每对创建一个唯一且可比较的实体。

【讨论】:

    【解决方案2】:

    使用Array.prototype.find():

    var numberStore = [
      [0, 0],
      [1, 1],
      [1, 2],
      [1, 3],
      [1, 4],
      [1, 5]
    ];
    var oneFour = numberStore.find(function([a, b]) {
      return a == 1 && b == 4;
    });
    console.log(oneFour);

    或者如果你喜欢ES6 arrow syntax:

    var numberStore = [
      [0, 0],
      [1, 1],
      [1, 2],
      [1, 3],
      [1, 4],
      [1, 5]
    ];
    var oneFour = numberStore.find(([a, b]) => a == 1 && b == 4);
    console.log(oneFour);

    【讨论】:

      【解决方案3】:

      另一种选择是使用方法some() 来测试元素的条件。

      var numberStore = [
          [0,0],
          [1,1],
          [1,2],
          [1,3],
          [1,4],
          [1,5]
      ];
      
      var exists = numberStore.some(([a, b]) => a === 1 && b === 4);
      
      console.log(exists ? "Pair [1,4] exists" : "Pair [1,4] don't exists");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 2018-08-18
        相关资源
        最近更新 更多