【问题标题】:JavaScript - find index of array inside another arrayJavaScript - 在另一个数组中查找数组的索引
【发布时间】:2022-01-06 17:56:53
【问题描述】:

我正在尝试在 Javascript 中的另一个数组中查找数组的索引,如下所示:

const piece = [5, 10];
const array = [[5, 10], [5, 11]];

//Using indexOf
console.log(array.indexOf(piece));

//Using findIndex
console.log(array.findIndex(function(element) {
  return element == piece;
  }));

我希望这些返回 0,因为这是我的“片段”在较大数组中的索引,但两种方法都返回 -1

任何想法为什么会发生这种情况?如果我有其他方法可以做到这一点?

谢谢。

【问题讨论】:

标签: javascript arrays


【解决方案1】:

要比较实际值,您可以使用JSON.stringify() 方法:

piece = [5, 10];
array = [[5, 10], [5, 11]];

//Using findIndex
console.log(array.findIndex(function(element) {
    return JSON.stringify(element) == JSON.stringify(piece);
    }));

【讨论】:

    【解决方案2】:

    您正在比较各自创建的对象(数组),因此它们不是相同的对象。如果你愿意,你可以比较数组中的每个整数,当数组长度也匹配时,你可以断定它们是“相同的”:

    piece = [5, 10];
    array = [[5, 10], [5, 11]];
    
    //Using findIndex
    console.log(array.findIndex(function(element) {
      return element.length === array.length 
          && element.every((val, i) => val == piece[i]);
    }));

    【讨论】:

      【解决方案3】:

      JavaScript 中的数组不是按值比较,而是按引用比较。因此,如果您有这样的数组 a 和 b:

      const a = [1, 2];
      const b = [1, 2];
      

      当您使用 == 或 === 比较它们时,会比较它们的引用,而不是值。所以这个console.log(a == b) 或console.log(a === b) 将打印错误。

      【讨论】:

        猜你喜欢
        • 2016-02-14
        • 1970-01-01
        • 2019-11-14
        • 2016-09-24
        • 2021-06-24
        • 2021-01-29
        • 2021-03-03
        • 1970-01-01
        • 2011-07-14
        相关资源
        最近更新 更多