Найти произвольный индекс строки массива по значению - для нескольких массивов - PullRequest
0 голосов
/ 07 января 2019

У меня небольшая проблема с массивами.

У меня есть строка в качестве значения, которая уникальна для индекса массива, например "Daa12d956752gja2":

g_nodeMapping["87686479/welcome.html"] = "daa12d956752gja2";

Эта строка - то, что я знаю. Что мне нужно получить, так это индекс, поэтому "87686479 / welcome.html". Дело в том ... у меня есть десятки таких массивов. В основном это выглядит так:

g_nodeMapping = [];
g_nodeMapping["8374628/test.html"] = "489fa3682975da";
g_nodeMapping["8953628/anothersite.html"] = "gi764295hf46";
g_nodeMapping["267857543/helpplx.html"] = "8653468te87a";

...

Я попробовал метод indexOf, но, похоже, он не находит индекс массива для значения после знака уравнения.

К сожалению, я не могу изменить массив.

Помощь очень ценится. Извините за форматирование, я на мобильном.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете определить функцию findCustomKey, которая принимает элемент массива (или значение) в качестве параметра и возвращает ключ. Следующий пример показывает, что:

var arr = [];
arr["8374628/test.html"] = "489fa3682975da";
arr["8953628/anothersite.html"] = "gi764295hf46";
arr["267857543/helpplx.html"] = "8653468te87a";

function findCustomKey(ele) {
    let keys = Object.keys(arr);
    for (let keyEle of keys) {
        if (arr[keyEle] == ele) {
            return keyEle;
        }
    }
}

console.log(findCustomKey("489fa3682975da"));
console.log(findCustomKey("8653468te87a"));
console.log(findCustomKey("abcd123"));


Выход:

8374628/test.html
267857543/helpplx.html
undefined


Другая версия (добавлено редактирование):

Вот еще один способ кодирования findCustomKey (способ его использования остается прежним):

function findCustomKeyV2(ele) {
    return Object.keys(arr).filter(k => arr[k] == ele)[0];
}


Другая версия:

Эта версия решения была добавлена, так как приведенный выше код не работал в браузерах IE. Следующий код работал в браузерах Firefox, Chrome и IE11.

var arr = [];
arr['8374628/test.html'] = '489fa3682975da';
arr['8953628/anothersite.html'] = 'gi764295hf46';
arr['267857543/helpplx.html'] = '8653468te87a';

var arrMap = new Map();
for (let k in arr) {
    arrMap.set(arr[k], k);
}

console.log(arrMap.get('489fa3682975da'));
console.log(arrMap.get('8653468te87a'));
console.log(arrMap.get('abcd123'));
0 голосов
/ 07 января 2019

Вы можете найти ключ, получив все ключи из объекта / массива и найдя значение.

function getKey(object, value) {
    return Object.keys(object).find(k => object[k] === value);
}
   
var g_nodeMapping = [];
g_nodeMapping["8374628/test.html"] = "489fa3682975da";
g_nodeMapping["8953628/anothersite.html"] = "gi764295hf46";
g_nodeMapping["267857543/helpplx.html"] = "8653468te87a";
g_nodeMapping["87686479/welcome.html"] = "daa12d956752gja2";

console.log(getKey(g_nodeMapping, "daa12d956752gja2"));
...