Получить индекс результата поиска в массиве - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующий код:

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

if (exists(member_data_list, "franz")) {
     //HERE I NEED TO GET THE INDEX OF MEMBER_DATA_LIST[?]
     //EXAMPLE: if (exists(member_data_list, "franz")) => RESULT => 2 (MEMBER_DATA_LIST[2])
     console.log("NAME IS IN ARRAY AT INDEX " + "?");
}
        
function exists(arr, search) {
   return arr.some(row => row.includes(search));
}

Как получить индекс имени в этом массиве?

Ответы [ 5 ]

1 голос
/ 20 февраля 2020

Одним из решений является получение элемента через .find(), а затем использование .indexOf(). например:

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

if (exists(member_data_list, "franz")) {
    var found = member_data_list.find(row => row[0] === "franz")
    var index = member_data_list.indexOf(found)
    
    // if the element is exists then index's value will be greater than -1
    if (index > -1) {
      console.log("NAME IS IN ARRAY AT INDEX " + index)
    }
}
        
function exists(arr, search) {
   return arr.some(row => row.includes(search));
}
0 голосов
/ 20 февраля 2020

Одна строка:

var i = member_data_list.findIndex(item => item[0] ==="franz");

Запустить онлайн:

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

console.log(member_data_list.findIndex(item => item[0] ==="franz"));
0 голосов
/ 20 февраля 2020

Вы также можете использовать Array.prototype.findIndex () (не работает в Inte rnet Explorer)

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

if (exists(member_data_list, "franz")) {
     var index = findIndex(member_data_list, 'franz'); 
     console.log("NAME IS IN ARRAY AT INDEX " + index);
}
        
function exists(arr, search) {
   return arr.some(row => row.includes(search));
}

function findIndex(arr, search) {
   return arr.findIndex(row => row.includes(search));
}
0 голосов
/ 20 февраля 2020

Вы можете перебирать массив и возвращать индекс вложенного массива. Чтобы узнать, доступно ли это имя в любом дочернем массиве, используйте includes или indexOf. Также предположим, что массив содержит два дочерних массива с некоторым содержимым, тогда будет возвращен более высокий индекс

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

function exists(arr, name) {
  let ind;
  arr.forEach((item, index) => {
    if (item.includes(name.toLowerCase())) {
      ind = index
    }
  })
  return ind;
}
let isExist = exists(member_data_list, "franz")
if (isExist) {
  console.log("NAME IS IN ARRAY AT INDEX " + isExist);
}
0 голосов
/ 20 февраля 2020

Вы можете создать другую функцию для получения индекса, зацикливающего массив и использующего:

var member_data_list = [
  ["adrian", "test", Number(9)],
  ["supler", "test", Number(2.3)],
  ["franz", "test", Number(2.5)],
  ["drucker", "test", Number(9.6)],
];

if (exists(member_data_list, "franz")) {
     var index = findIndex(member_data_list, 'franz'); 
     console.log("NAME IS IN ARRAY AT INDEX " + index);
}
        
function exists(arr, search) {
   return arr.some(row => row.includes(search));
}

function findIndex(array, value) {
    for (var i = 0; i < array.length; i += 1) {
        if (array[i].includes(value)) {
            return i;
        }
    }
    return -1;
}
...