【问题标题】:JavaScript indexOf didn't return good resultsJavaScript indexOf 没有返回好的结果
【发布时间】:2018-07-02 06:25:51
【问题描述】:

我正在尝试通过函数 indexOf 查找我的数组的索引,但我无法得到正确的结果。

var points =[
    ["2.408","38.8"],
    ["2.410","38.8"],
    ["2.410","38.76"]
];
var position = points.indexOf(["2.408","38.8"]);

我认为它应该返回 0 而不是 -1,所以我将这两个数组作为打击。

console.log(points[0]===["2.408","38.8"])

然后我错了。

我不明白为什么这不是真的。

感谢您的建议...

【问题讨论】:

标签: javascript arrays indexing


【解决方案1】:

您可以使用findIndexevery 方法来做到这一点。

var points = [["2.408", "38.8"], ["2.410", "38.8"],["2.410", "38.76"]];
const arr = ["2.408","38.8"];

const i = points.findIndex(a => {
  return a.length == arr.length && arr.every((e, i) => a[i] == e)
})

console.log(i)

【讨论】:

  • 数组中是否存在重复值相同的元素?
  • 您的代码没有考虑索引和重复值,例如["2.408", "2.408"]
  • @charlietfl 不,不会。它将输出 ["38.8", "2.408"] 在数组中,但不是
  • @pwolaq 好的...这种情况是有道理的...你提到的第一个没有
  • @charlietfl 它也可以,但如果您在 points 中进行更改,而不是搜索值
【解决方案2】:

您搜索的不是同一个数组。

当您创建一个数组时,您正在创建一个对象并将对它的引用存储在一个变量中。当您搜索数组数组时,查找逻辑将按引用进行比较,而不是按深度值进行比较。这就是indexOf 给你-1 的原因;您实际上并没有在 Array of Arrays 中搜索任何真正存在的东西。

const a = ["foo", "bar"],
  b = ["foo", "bar"];

const arr = [a];

console.log(arr.indexOf(["foo", "bar"])); // -1, not the right reference
console.log(arr.indexOf(b)); // -1, again, not the right reference
console.log(arr.indexOf(a)); // 0, the right reference

【讨论】:

    【解决方案3】:

    您可以使用 findIndex 和辅助函数来创建与任何数组的比较。

        var allElementsEquals = function(refArray) {
            return function(array) {
              if (array.length !== refArray.length) return false;
        	  for (var i = 0; i < array.length; i++) { if (array[i] !== refArray[i]) return false; }
              return true
            }
        }
    
        // test 1 
        var points =[
            ["2.408","38.8"],
            ["2.410","38.8"],
            ["2.410","38.76"]
        ];
        var position = points.findIndex(allElementsEquals(["2.408","38.8"]));
        console.log(position);
    
    
        // test 2
        var points =[
            ["2.410","38.8"],
            ["2.408","38.8"],
            ["2.410","38.76"]
        ];
        var position = points.findIndex(allElementsEquals(["2.408","38.8"]));
        console.log(position);
        
        // test 3
            var points =[
            ["2.410","38.8"],
            ["2.409","38.8"],
            ["2.410","38.76"]
        ];
        var position = points.findIndex(allElementsEquals(["2.408","38.8"]));
        console.log(position);
    
        // test 4
            var points =[
            ["2.410","38.8"],
            ["38.8","2.408"],
            ["2.410","38.76"]
        ];
        var position = points.findIndex(allElementsEquals(["2.408","38.8"]));
        console.log(position);

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2019-07-09
      相关资源
      最近更新 更多