对于 Java 脚本中的二维数组,您如何找到所有值的索引?

For a 2D array in Java Script How do you find ALL indexesOf value?

我有一个二维数组和一个将 return 值 Q 的索引的函数。如何编写函数才能获得 AllIndexOfQ?所以如果我正在寻找 "dog" 我会得到 [0,0],[1,2],[3,1],[3,2]

var arr = Array(['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']);

function getIndexOfQ(data, q) {
  for (var i = 0; i < data.length; i++) {
    var index = data[i].indexOf(q);
    if (index > -1) {
      return [i, index];
    }
  }
}

var a = getIndexOfQ(arr, "dog");
console.log(a);

不要 return,改为推送到数组。另外, indexOf 是不够的,因为那不会找到 all 匹配,只是第一个匹配。您必须遍历子数组的每个项目,如果匹配,则将两个索引的数组推送到匹配数组:

var arr = Array(['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']);

function getIndexOfQ(data, q) {
  const matches = [];
  data.forEach((arr, i) => {
    arr.forEach((item, j) => {
      if (item === q) {
        matches.push([i, j]);
      }
    });
  });
  return matches;
}

var a = getIndexOfQ(arr, "dog");
console.log(a);

arr.indexOf(searchElement[, fromIndex]) 根据 MDN。

这意味着您可以遍历数组并每次指定一个起点以查找所有出现的事件。

为多个匹配项编写一行代码很棘手

const arr = [['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']];
const getIndexOfQ = (data, q) => {
  let matches = [];
  data.forEach((a, i) => { 
    a.forEach((item, j) => { if (item === q) matches.push([i, j]) }) 
  })
  return matches;
};


const a = getIndexOfQ(arr, "dog");
console.log(a);

如果你只想在每个数组中找到一只狗,试试这个

const arr = [['dog', 'cat', 'fish'], ['fish', 'fish', 'dog'], ['cat', 'tiger', 'fish'], ['cat', 'dog', 'dog']];

const getIndexOfQ = (data, q) => data.map(
  (item,i) => (item.indexOf(q) !==-1) ? [i,item.indexOf(q)] : false)
  .filter(item => item);

const a = getIndexOfQ(arr, "dog");
console.log(a);