Поиск по данным и вывод результата indexOf()

250
19 октября 2017, 12:12

Добрый день, у меня есть данные в таком формате:

[
  {
    "name": "Alexandra Palace",
    "code": "AAP",
    "lat": 51.59793,
    "lon": -0.12023
  },
  {
    "name": "Achanalt",
    "code": "AAT",
    "lat": 57.60958,
    "lon": -4.91386
  },
  {
    "name": "Aberdare",
    "code": "ABA",
    "lat": 51.71506,
    "lon": -3.4431
  }
]

Я хочу найти элемент с code: ABA пишу: locations.map((key) => key.code).indexOf('ABA') > -1. Выдает true, пока все ок. После того как нашел этот code в данных мне нужно вывести name этого code (Должно вывести Aberdare). Подскажите как это сделать?

Answer 1

Не используя indexOf().

var found = locations.find((loc) => {
    return loc.code === "ABA";
});
var res = found ? found.name : undefined;

Ответ (name) будет содержаться в переменной res. Если элемента с кодом "ABA" вообще не было найдено, то в res будет undefined. undefined также будет в том случае, если элемент по коду "ABA" найден, но у него нет поля name.

Рабочий пример:

var locations = [ 
  { 
    "name": "Alexandra Palace", 
    "code": "AAP", 
    "lat": 51.59793, 
    "lon": -0.12023 
  }, 
  { 
    "name": "Achanalt", 
    "code": "AAT", 
    "lat": 57.60958, 
    "lon": -4.91386 
  }, 
  { 
    "name": "Aberdare", 
    "code": "ABA", 
    "lat": 51.71506, 
    "lon": -3.4431 
  } 
] 
 
var found = locations.find((loc) => { 
    return loc.code === "ABA"; 
}); 
 
var res = found ? found.name : undefined; 
console.log(res);

Answer 2

После применения map к массиву в выходном массиве у вас остаются только значения полей code

const locations = [ 
  { 
    "name": "Alexandra Palace", 
    "code": "AAP", 
    "lat": 51.59793, 
    "lon": -0.12023 
  }, 
  { 
    "name": "Achanalt", 
    "code": "AAT", 
    "lat": 57.60958, 
    "lon": -4.91386 
  }, 
  { 
    "name": "Aberdare", 
    "code": "ABA", 
    "lat": 51.71506, 
    "lon": -3.4431 
  } 
]; 
 
const m = locations.map((key) => key.code); 
 
console.log(m);

можно заменить map например на filter, в котором функция выполняется так же для каждого элемента массива, возвращая результат логической операции. filter создает новый массив и помещает в него все элементы массива источника для которого функция вернула true:

const locations = [ 
  { 
    "name": "Alexandra Palace", 
    "code": "AAP", 
    "lat": 51.59793, 
    "lon": -0.12023 
  }, 
  { 
    "name": "Achanalt", 
    "code": "AAT", 
    "lat": 57.60958, 
    "lon": -4.91386 
  }, 
  { 
    "name": "Aberdare", 
    "code": "ABA", 
    "lat": 51.71506, 
    "lon": -3.4431 
  } 
]; 
 
const res = locations.filter(v => { 
  return v.code === "ABA"; 
})[0]; 
 
console.log(res.code);

READ ALSO
Где происходит получение атрибута file в Pdfjs?

Где происходит получение атрибута file в Pdfjs?

ПриветствуюКто пользовался Pdfjs? Нужна ваша помощь

267
Условие javascript

Условие javascript

хочу написать условие: если время больше 10 и нажата кнопка class="btn-order" ,вывести сообщениеКак правильно написать второе условие(если нажата...

253
Не работает шорткод

Не работает шорткод

Создал простой шорткод в functionsphp:

357
Sugarcrm 6.5 : Как заменить SQL query на массив с данными?

Sugarcrm 6.5 : Как заменить SQL query на массив с данными?

ЗдравствуйтеЯ собираюсь интегрировать api с Sugarcrm 6

308