У меня есть массив с идентификаторами. Любой элемент с data-functionID, которого нет в массиве, должен быть удален. Поэтому я перебираю все элементы с атрибутом data-functionID, и если идентификатор не существует в массиве, он удаляется.
Теперь моя проблема в том, что jQuery.inArray () всегда возвращает -1 (в доступе к переменной), и я не могу понять, почему.
//html-example
<button data-functionID = "j1_1" onclick = "doStuff()">Button 1</button>
<button data-functionID = "j1_24" onclick = "doOtherStuff()">Button 2</button>
Массив, определенный ниже, написан с помощью PHP с использованием mysqli_fecth_all-query, который я просто сохраняю в переменной $role, которая кодируется в JSON:
var role = JSON.parse('<?php echo json_encode($role)?>');
После PHP это выглядит так:
// defining array
var role = JSON.parse('[["j1_1"],["j1_24"],["j1_63"],["j1_62"],["j1_61"],["j1_60"],["j1_59"],["j1_57"],["j1_58"],["j1_56"],["j1_55"],["j1_54"],["j1_53"],["j1_51"],["j1_52"],["j1_50"],["j1_49"],["j1_48"],["j1_47"],["j1_46"],["j1_45"],["j1_44"],["j1_43"],["j1_42"],["j1_41"],["j1_40"],["j1_39"],["j1_38"],["j1_37"],["j1_36"],["j1_35"],["j1_34"],["j1_33"],["j1_32"],["j1_31"],["j1_30"],["j1_29"],["j1_28"],["j1_27"],["j1_26"],["j1_25"],["j1_23"],["j1_22"],["j1_21"],["j1_20"],["j1_19"],["j1_18"],["j1_17"],["j1_16"],["j1_15"],["j1_14"],["j1_13"],["j1_12"],["j1_11"],["j1_10"],["j1_9"],["j1_8"],["j1_7"],["j1_6"],["j1_5"],["j1_4"],["j1_3"],["j1_2"]]');
// test
$("[data-functionID]").each(function(e){
functionID = $(this).attr('data-functionID');
var access = jQuery.inArray(functionID, role);
console.info(functionID + ':' + access);
if (access == -1){
$(this).remove();
}
});
Добавьте примеры functionID и role к вашему вопросу.
Массив выглядит так, потому что я просто позволяю PHP записывать его из mysqli_fetch_all-query, который я JSON-кодирую в javascript. Есть ли способ использовать тест similair для того же массива, или это лучший способ не использовать тот, что из mysqli-query, и сделать свой собственный?
Я добавил объяснение к массиву и идентификатору функции



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, я решил свою проблему с изменением массива, который должен быть создан из mysqli_query, чтобы пройти через mysqli_fetch_assoc и создать массив вручную, чтобы получить одномерный массив.
$role = array();
while($row = mysqli_fetch_assoc($result)){
$role[] = $row['functionID'];
}
Что дает вывод javascript в виде одномерного массива:
var role = JSON.parse('["j1_1","j1_24","j1_63","j1_62","j1_61","j1_60","j1_59","j1_57","j1_58","j1_56","j1_55","j1_54","j1_53","j1_51","j1_52","j1_50","j1_49","j1_48","j1_47","j1_46","j1_45","j1_44","j1_43","j1_42","j1_41","j1_40","j1_39","j1_38","j1_37","j1_36","j1_35","j1_34","j1_33","j1_32","j1_31","j1_30","j1_29","j1_28","j1_27","j1_26","j1_25","j1_23","j1_22","j1_21","j1_20","j1_19","j1_18","j1_17","j1_16","j1_15","j1_14","j1_13","j1_12","j1_11","j1_10","j1_9","j1_8","j1_7","j1_6","j1_5","j1_4","j1_3","j1_2"]');
Что такое «доступ»? Каждый элемент в массиве ролей представляет собой подмассив со значением. Если вы пытаетесь найти значение, оно не будет соответствовать ни одному из массивов первого уровня. строка === массив никогда не бывает истинным. Также я задаюсь вопросом, почему у вас есть массив, заполненный субмассивами, в которых есть только один элемент. Имхо, это запах модели данных.