【问题标题】:Finding the index position of an array inside an array in JavaScript [duplicate]在JavaScript中查找数组内数组的索引位置[重复]
【发布时间】:2017-01-21 12:02:10
【问题描述】:
var a = [[1,0],[0,1],[0,0]];

如果我想找到[0,0]的索引位置?如何在 JavaScript 中做到这一点?

我检查了几个地方和 indexOf 函数,但它不适用于多维数组。

【问题讨论】:

  • 您可能想了解 JavaScript 中的引用和值。 indexOf 和所有其他对通用对象进行操作的函数将通过引用进行比较。两个盒子包含相同的数字,但它们不是同一个盒子。

标签: javascript arrays list


【解决方案1】:

您可以制作索引的哈希图并访问它

var a = [[1,0],[0,1],[0,0]],

b = a.reduce((a,c,i)=>{
  a[c] = i;
  return a;      
},{});

console.log('Index of [0,0] is ' +b[ [0,0] ] )

【讨论】:

  • @Pineda 运行代码并查看它记录的内容
  • 抱歉,我仍然想弄清楚为什么会这样。虽然它很甜蜜,但不知道为什么它被否决
  • @Pineda 因为数组在用作对象属性时被隐式转换为字符串
  • Blimey,所以 hashmap 实际上是一个对象,它的属性充当访问键,保存某个值,在这种情况下是它们位置的索引。但是,如果数组中有重复项,这将中断,因为返回的索引将是数组中最后一个实例的索引...
  • 恕我直言,这是一个可怕的想法。当您将数组用作属性名称时,它依赖于将数组转换为字符串的副作用,因此效率低下且仅对非常非常狭窄的用例有用(这 is i> 其中之一,但很少)。至少,这个答案需要解释它在做什么,为什么它在大多数情况下会失败,以及为什么它在这种特定情况下有效。
【解决方案2】:

您可以使用Array#some 进行外部迭代,使用Array#every 进行内部迭代并检查长度和项目。

var array = [[1, 0], [0, 1], [0, 0]],
    find = [0, 0],
    index = -1;

array.some(function (a, i) {
    if (a.length === find.length && a.every(function (b, j) { return b === find[j]; })) {
        index = i;
        return true;
    }
});

console.log(index);

【讨论】:

  • 你真的应该只是欺骗这个问题:stackoverflow.com/q/8670345/2902660(我不能,因为我很傻,很早就投票不清楚)。 (不是我的 dv,顺便说一句——不像这里的许多其他答案 :-) 你的是这里唯一不错的解决方案)
【解决方案3】:

快速(就性能而言)使用while 循环和Array.prototype.every() 函数的解决方案:

var a = [[1,0],[0,1],[0,0]], len = a.length,
        search_item = [0,1], pos = -1;

while (len--) {
    if ((a[len].length === search_item.length) 
            && a[len].every(function(el, i){ return el == search_item[i]; })) {
        pos = len;
        break;
    }
}

console.log(pos);

Array.prototype.every()

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2017-03-08
    • 1970-01-01
    • 2011-07-14
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多