Перебрать массив объектов и получить значение ключа

Рейтинг: 1Ответов: 3Опубликовано: 15.09.2014

Что-то неправильно делаю.

Есть массив:

var arr = [ 
       { key: 'слово', value: 'значение1' },
       { key: 'слово2', value: 'значение2' },
       { key: 'слово3', value: 'значение3' }
    ]

Нужно по слову "слово2" получить значение value (значение2).

Пробую так:

function getValue(array, value) {
    var obj = array.filter(function(arr, i){
        return arr.key === value ? arr.value : '';
    });
    return obj;
}

console.log(getValue(arr, "слово2"));

Получаю массив с одним объектом, а нужно получить только значение value.

Ответы

▲ 5Принят
function getValues(array, search) {
  var values = [];

  array.forEach(function(values, item){
    (item.key === search) && values.push(item.value);
  });

  return values;
}

function getValues(array, search) {
  return array
    .filter(function(values, item){
      return (item.key === search)
    })
    .map(function (item) {
      return item.value;
    });
}

function getValues(array, search) {
    return array.reduce(function(values, item){
        (item.key === search) && values.push(item.value);
        return values;
    }, []);
}

UPD: Если нужно только одно значение, то нечего выдумывать:

function getValue(array, search) {
  var i = array.length;
  while (i--) {
      if (array[i].key === search) {
         return array[i].value;
      }
  }
}
▲ 1

http://jsfiddle.net/azttrwxs/ я бы это сделал вот так

▲ 1

Вариант с reduce:

function getValue( A, K) {
    return A.reduce(
        function( prev, item) {
          return ( !prev  &&  item.key == K) ? item.value : prev;
        },
        false
    );
}

попробовать