2012-06-07 3 views
5

Привет я в настоящее время выборки массива с .eachПолучить ключ ассоциативного массива

$.each(messages, function(key,message){ doStuff(); }); 

Но ключ индекс массива, а не ассоциативный ключ.

Как я могу получить его легко?

Благодаря

+5

В массиве нет ассоциативного ключа. Индекс - это ключ. Что ты пытаешься сделать? – Guffa

+2

Где вы Array i.e 'messages'? post – thecodeparadox

+1

Не могли бы вы представить примерный массив (2-3 элемента) и какой «ассоциативный ключ» вы ожидаете? –

ответ

9
var data = { 
    val1 : 'text1', 
    val2 : 'text2', 
    val3 : 'text3' 
}; 
$.each(data, function(key, value) { 
    alert("The key is '" + key + "' and the value is '" + value + "'"); 
}); 
​ 

См Demo

+0

Спасибо, я буду использовать массив, чтобы получить эту работу, вы правы –

0

JavaScript не имеет "ассоциативные массивы", как в PHP, но объекты. Однако объекты могут иметь строковые ключи, соответствующие значению. Массивы представляют собой списки значений, индексированных численно, поэтому, если key - это число, это должен быть массив, с которым вы работаете, а не объект, и поэтому вы не можете получить ключ, так как его нет.

Таким образом, вы, вероятно, захотите перебрать массив с помощью простого for -loop вместо итератора на основе обратного вызова, такого как $.each.

19

У JavaScript нет «ассоциативных массивов». Он имеет массивы:

[1, 2, 3, 4, 5] 

и объекты:

{a: 1, b: 2, c: 3, d: 4, e: 5} 

массива не имеют "ключи", они имеют индексы, которые учитываются, начиная с 0.

Массивы доступ с помощью [] , и объекты могут быть доступны с использованием [] или ..

Пример:

var array = [1,2,3]; 
array[1] = 4; 
console.log(array); // [1,4,3] 

var obj = {}; 
obj.test = 16; 
obj['123'] = 24; 
console.log(obj); // {test: 16, 123: 24} 

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

var array = [1,2,3]; 
array['test'] = 4; // this doesn't set a value in the array 
console.log(array); // [1,2,3] 
console.log(array.test); // 4 

JQuery в $.each работает с обоих из них. В обратном вызове для $.each первый параметр, key, является либо ключом объекта, либо индексом массива.

$.each([1, 2, 3, 4, 5], function(key, value){ 
    console.log(key); // logs 0 1 2 3 4 
}); 

$.each({a: 1, b: 2, c: 3, d: 4, e: 5}, function(key, value){ 
    console.log(key); // logs 'a' 'b' 'c' 'd' 'e' 
}); 
Смежные вопросы