Как найти индекс элемента в многомерном массиве с помощью JavaScript / JQuery

Преобразование массива JSON из массива PHP с помощью json_encode. Я хочу найти индекс определенного элемента из этого массива JSON с помощью JavaScript / JQuery.

Сначала пользователь выберет вариант, в котором значениями будут идентификаторы людей.

<select class = "form-control" id = "pname" name = "pname" required>
    <option value = "">--Please select--</option>
    <option value = "312">John Doe</option>
    <option value = "313">Mark Angel</option>
    <option value = "314">Chloe Karl</option>
</select>

Затем с помощью JavaScript / JQuery мне нужно получить индекс значения выбранной опции из массива JSON, приведенного ниже.

{
"p_id":{"1":312,"2":313,"3":314},
"p_name":{"1":"John Doe","2":"Mark Angel","3":"Chloe Karl"},
"p_dob":{"1":"1983","2":"1993","3":"1987"},
"p_sex":{"1":"Male","2":"Male","3":"Male"}
}

Я не вижу в ваших данных никаких массивов. Это все объекты. Массивы заключены в [ ] в javascript.

Mark 03.09.2018 19:24

Спасибо, на самом деле я новичок в этом Json. Когда я погуглил, чтобы преобразовать массив php в массив json, я получил предложение. Может я ошибся.

Neel Debnath 03.09.2018 19:29

Как выглядит ваш массив PHP и какой код вы используете для его преобразования?

Dan 03.09.2018 19:35

Массив ([p_id] => Массив ([1] => 312 [2] => 313 [3] => 314) [p_name] => Массив ([1] => Джон Доу [2] => Марк Энджел [ 3] => Хлоя Карл) [p_dob] => Массив ([1] => 2018 [2] => 1534444200 [3] => 782591400) [p_sex] => Массив ([1] => Мужской [2] = > Male [3] => Male)) Выглядит примерно так .. И я использовал json_encode для его преобразования.

Neel Debnath 03.09.2018 19:42

@NeelDebnath Я добавил для вас ответ. Надеюсь на эту помощь

Always Sunny 03.09.2018 19:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
804
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас есть литерал объекта javascript, а не массив, вы можете использовать цикл for in для итерации и поиска того, что вы ищете.

var obj = {
  p_id: { "1": 312, "2": 313, "3": 314 },
  p_name: { "1": "John Doe", "2": "Mark Angel", "3": "Chloe Karl" },
  p_dob: { "1": "1983", "2": "1993", "3": "1987" },
  p_sex: { "1": "Male", "2": "Male", "3": "Male" }
};

var selected = 313;

for (p in obj.p_id) {
  if (obj.p_id[p] == selected) {
    console.info(p);
  }
}

Если у вас есть необработанный ответ от php, у вас есть JSON. Вы можете преобразовать его в объект, используя JSON.parse()

Спасибо друг. действительно заметный.

Neel Debnath 03.09.2018 19:46
Ответ принят как подходящий

Если я не неправильно понял / неправильно истолковал ваш вопрос, тогда вам нужен этот сниппет.

Что нужно сделать:

  1. Сначала добавьте событие onchange в свой элемент select.

  2. Разберите строку json с помощью JSON.parse()

  3. Используйте Array.prototype.filter(), чтобы получить ключ / индекс выбранного пользователя.

function getSelect() {
  var obj = JSON.parse('{"p_id":{"1":312,"2":313,"3":314},"p_name":{"1":"John Doe","2":"Mark Angel","3":"Chloe Karl"},"p_dob":{"1":"1983","2":"1993","3":"1987"},"p_sex":{"1":"Male","2":"Male","3":"Male"}}');
  var ids = obj.p_id;
  var e = document.getElementById("pname");
  var user = e.options[e.selectedIndex].value;
  //console.info(ids, user, Object.keys(ids))
  if (user && user! = ""){
    var k = Object.keys(ids).filter((key) => {
      return ids[key] == user;
    })[0];
     console.info(k)
   }else {
     console.info('Select an option first');
   }
  
}
<select class = "form-control" onchange = "getSelect()" id = "pname" name = "pname" required>
  <option value = "">--Please select--</option>
  <option value = "312">John Doe</option>
  <option value = "313">Mark Angel</option>
  <option value = "314">Chloe Karl</option>
</select>

В строке Cannot read property 'undefined' of undefined отображается ошибка var user = e.options[e.selectedIndex].value.

Neel Debnath 03.09.2018 20:08

@NeelDebnath Вы запускали фрагмент кода на сайте Stackoverflow.com?

Always Sunny 03.09.2018 20:10

Ошибка отображается на моем рабочем месте, код в фрагменте Stackoverflow работает нормально.

Neel Debnath 03.09.2018 20:15

проверьте наличие id с именем pname

Always Sunny 03.09.2018 20:16

Сейчас он работает. Я просто переписываю html-код <select> и перемещаю событие DOM с последнего на после классов. Большое спасибо. Наконец-то он заработал,

Neel Debnath 03.09.2018 20:27

Рад, что это вам как-то помогло, удачи :)

Always Sunny 04.09.2018 02:31

Другие вопросы по теме