2013-09-06 3 views
-4

Я хочу, чтобы получить значение из JSON объекта другого значения мой код:JQuery: Как получить значение из массива JSON объекта другого значения

var ar=[{"one","a"},{"two","b"},{"three","c"},{"four","d"}]; 

Я хочу сделать что-то вроде этого, не используя петлю:

var val=ar["c"]; // i want result=three 
+3

Это не является действительным JSON или JavaScript. – Blender

+1

Посмотрите [здесь] (http://www.w3schools.com/json/), чтобы увидеть, как разбирать JSON. – Zosimas

+0

@ Zosimas: Это прекрасно, но не имеет значения; здесь нет JSON. –

ответ

0

Предполагая, что на самом деле у вас массив массивов. И вы не меняете его. Вы можете преобразовать этот массив в объект.

var ar=[ ["one","a"], ["two","b"] , ["three","c"], ["four","d"] ]; 

var cache = (function(arr){ 
    var cache = {}; 
    arr.forEach(function(item){cache[item[1]] = item[0]}); 
    return cache; 
}(ar)); 
cache["c"]; //"three" 
3

Простой ответ: это невозможно. Looping - единственный способ получить, если у вас есть только структура данных, которую вы опубликовали.

Таким образом, лучшим решением является запись функции, которая пересекает объект и возвращает значение. Таким образом, вы можете легко получить к нему доступ, когда вам это понадобится, без написания цикла каждый раз. Однако по очевидным причинам это O (n).

+0

И это если вы допустите некоторую действительную версию структуры данных, которая, как указано, не является. –

+0

Или вы можете выполнить цикл один раз, создать хэш и использовать его позже, чтобы найти какое-либо свойство в O (1) раз. –

1

Предполагая опечатках выше, и что вы имели в виду, чтобы написать:

var ar=[ ["one","a"], ["two","b"] , ["three","c"], ["four","d"] ]; 

Если вы можете жить с IE 9 и выше, или в других современных браузерах, array.filter() может помочь:

function findMatch(ar, key) { 
    var matches = ar.filter(
    function(el) { 
     return (el[1] == key); // match against the second element of each member 
    } 
); 

    if (matches.length > 0) 
    return(matches[0][0]); // return the first element of the first match 
    else 
    return null; 
} 

var val = findMatch(ar, "c"); 

Для более ранних браузеров здесь приведена версия DIY filter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

0

Это, безусловно, можно без петель, просто не самый лучший способ,

при условии, что ваш массив находится в указанном порядке с прогрессированием объекта как аЬс .. и ключи в нижнем регистре в к г

var ar=[{"one" : "a"},{"two" : "b"},{"three" : "c"},{"four" : "d"}]; 

var key = ("c".charCodeAt(0) - 97); 

var val = Object.keys(ar[key])[0]; 

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

EDIT: Я забыл исправить свои объекты, вот jsfiddle http://jsfiddle.net/rJ7j9/

Смежные вопросы