Для двумерного массива в Java Script Как найти значение ALL indexesOf? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть 2D-массив и функция, которая будет возвращать индекс значения Q. Как я могу написать функцию, чтобы я мог получить AllIndexOfQ? Поэтому, если я ищу "собаку", я получу [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);

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

arr.indexOf(searchElement[, fromIndex]) в соответствии с MDN.

Это означает, что вы можете l oop через свой массив и каждый раз указывать начальную точку, чтобы найти все вхождения.

0 голосов
/ 22 апреля 2020

Хитро написать однострочник для нескольких совпадений

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);
0 голосов
/ 22 апреля 2020

Не return, pu sh вместо массива. Кроме того, indexOf недостаточно, потому что не будет найдено всех совпадений, только первое совпадение. Вам придется перебирать каждый элемент подмассива, и, если он совпадает, pu sh массив двух указателей на массив совпадений:

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);
...