2015-06-05 4 views
2

У меня есть массив объектов:объектов JavaScript карта значений

[{a:1;b:2},{a:3;b:4},{a:5;b:6},{a:7;b:8},{a:9;b:10}] 

И вход значение для, как 1, и я хочу выход быть значение, соответствующее Ь, которые возвращают 2, например, ,

У меня есть наивный метод для цикла через массив и возврата результата. Мне интересно, есть ли лучшие решения? Подобно сопоставлению массива с массивом значений a и получению индекса ввода, получаем результат с использованием индекса, который мы получаем.

Еще одно объяснение состоит в том, что значение a идентично, они не являются значениями, примеры служат для иллюстрации проблемы.

пример:

INPUT: 1 OUTPUT:2 

INPUT: 3 OUTPUT:4 

INPUT: 5 OUTPUT:6 

INPUT: 7 OUTPUT:8 

И мой код выглядит так:

var test=function(obj){ 
    var a=obj.map(function(item){ 
     return item.a; 
    }) 
    return obj[a.indexof("1")].b; 
} 
+3

Ухм, '{1: 2, 3: 4, 5: 6, 7: 8}' и т.д.? – adeneo

+0

Сколько элементов массива вы ожидаете? – bloodyKnuckles

+0

@thefourtheye, поэтому я хочу получить значение b, соответствующее входу a. Поэтому, если мой ввод равен 5, я хочу вернуть 6, если входной файл равен 9, и я хочу вернуть 10 – Gabriel

ответ

2

Вы можете предобработки массив объектов, чтобы создать один объект, который будет хранить значения a в качестве ключей, а значения b в качестве соответствия nding значения, с Array.prototype.reduce, как этот

> var d = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8}, {a: 9, b: 10}]; 
undefined 
> var lookup = d.reduce(function (result, currentObject) { 
...  result[currentObject.a] = currentObject.b; 
...  return result; 
... }, {}); 
undefined 
> lookup 
{ '1': 2, '3': 4, '5': 6, '7': 8, '9': 10 } 

Тогда вы можете получить значение, соответствующее числу от lookup, как этот

> lookup[5] 
6 
> lookup[9] 
10 

Если значение, которое вы ищете, нет в lookup, вы получите undefined.

> lookup[11] 
undefined 
1

Я думаю, что может быть приятно

var obj = [{a:1,b:2},{a:3,b:4},{a:5,b:6},{a:7,b:8},{a:9,b:10}]; 

function get_it(_v){ 
    for(x=0;x<obj.length;x++) if(obj[x].a == _v) return obj[x].b; 
} 

console.log(get_it(prompt('Insert your number:'))); 
1

Это делает то, что вы хотите. Тем не менее, вам нужно подумать о возможном случае, когда в массиве больше объектов с совпадающей иглой a.

function getBbyA(input, needle) { 
    for (var index in input) { 
     if (input[index].a === needle) { 
      return input[index].b; 
     } 
    } 
    return null; 
} 
1

var arr = [{a:1,b:2},{a:3,b:4},{a:5,b:6},{a:7,b:8},{a:9,b:10}]; 
 

 
function getIt(num){ 
 
    return arr.filter(function(item){ 
 
    return item.a === num; 
 
    }).pop().b 
 
} 
 

 
alert(getIt(5));

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