jQuery Получить ассоциативный массив Key из индекса

Мой вопрос следующий в массиве:

    var array = new Array();
    array['abc'] = 'value1';
    array['def'] = 'value2';

Как мне получить ассоциативный ключ массива, если у меня есть его индекс? Допустим, я хочу ассоциативный ключ ассоциативного ключа arr[0] ( => 'abc') или ассоциативный ключ arr[1] '=> 'def'). Как это возможно в jQuery?

Давайте будем ясны, я не ищу значение и мне не нужно использовать $.each(). Мне просто нужно связать 0 с 'abc' и 1 => 'def' и т. Д. К сожалению, что-то вроде arr[0].assoc_key() не существует T_T Спасибо большое.

3 ответа

Решение

Итак, решение довольно простое, вам нужно создать объект, который связывает индексы с ключами, а также ключи со значениями. Вот JSBin, который работает. Обратите внимание, что для добавления элемента вам нужна пользовательская функция (в данном случае addElement), чтобы иметь возможность привязывать и индексы, и ключи в нужных местах. Это черновик, чтобы дать вам представление о том, как это можно сделать!

JSBin

Если у вас есть какие-либо вопросы или если это не совсем то, что вы ожидали, просто отредактируйте свой вопрос, и я еще раз посмотрю на него. Это должен быть объект, сделанный на заказ, если вы хотите, чтобы поведение, которое вы просили.

Javascript не имеет собственного типа словаря, вам придется написать его. - T McKeown

Это невозможно, и jQuery вообще не входит в картину. Если вы используете массив в качестве словаря, вы делаете что-то не так. - Джон

переосмыслить способ, которым вы делаете это. Возможно, попробуйте массив [0] = {ключ: 'abc', значение: 'значение1'} - Geezer68

@ Geezer68, объекты не поддерживают многомерные данные, массив, над которым я работаю, имеет глубину 3 уровня (я знаю, что я не говорил об этом в своем первоначальном сообщении, но я не думал, что это было актуально).

В любом случае, спасибо, ребята, это отвечает на вопрос! Я переосмыслил это тогда;-)

РЕДАКТИРОВАТЬ: Я думаю, я просто добавлю уровень:

    var array = new Array();
    array[] = 'abc';
    array[0] = 'value1'

Я не знаю другого, кроме как с помощью for ... in, Итак, вот как я это делаю и надеюсь, что вы получите лучший ответ (потому что я хочу знать, а!).

var array = new Array();
array['abc'] = 'value1';
array['def'] = 'value2';

var listKeys = [];
for(x in array) listKeys.push(x);

console.log(listKeys); // ['abc', 'def']

но используя [string] объект массива добавляет свойство к объекту, а не к массиву. Так что может быть лучше инициализировать это так:

var array = {};

Вы можете узнать больше информации об этой технике в этом вопросе и некоторые ограничения, почему вы не должны полагаться на это.

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