Javascript find json value - программирование
Подтвердить что ты не робот

Javascript find json value

Мне нужно искать внутри json список стран. Json похож:

[ 
{"name": "Afghanistan", "code": "AF"}, 
{"name": "Åland Islands", "code": "AX"}, 
{"name": "Albania", "code": "AL"}, 
{"name": "Algeria", "code": "DZ"}
]

Я получаю из базы данных только код и выводит все имя. Поэтому, если я получу "AL", я хотел бы получить от json "Албания"

4b9b3361

Ответ 1

var obj = [
  {"name": "Afghanistan", "code": "AF"}, 
  {"name": "Åland Islands", "code": "AX"}, 
  {"name": "Albania", "code": "AL"}, 
  {"name": "Algeria", "code": "DZ"}
];

// the code you're looking for
var needle = 'AL';

// iterate over each element in the array
for (var i = 0; i < obj.length; i++){
  // look for the entry with a matching `code` value
  if (obj[i].code == needle){
     // we found it
    // obj[i].name is the matched result
  }
}

Ответ 2

Я предлагаю использовать метод JavaScript Array filter() для идентификации элемента по значению. Он фильтрует данные, используя "функцию для проверки каждого элемента массива. Возвращает true, чтобы сохранить элемент, иначе false".

Следующая функция фильтрует данные, возвращая данные, для которых обратный вызов возвращает true, т. data.code Где data.code равен запрашиваемому коду страны.

function getCountryByCode(code) {
  return data.filter(
      function(data){ return data.code == code }
  );
}

var found = getCountryByCode('DZ');

Смотрите демонстрацию ниже:

var data = [{
  "name": "Afghanistan",
  "code": "AF"
}, {
  "name": "Åland Islands",
  "code": "AX"
}, {
  "name": "Albania",
  "code": "AL"
}, {
  "name": "Algeria",
  "code": "DZ"
}];


function getCountryByCode(code) {
  return data.filter(
    function(data) {
      return data.code == code
    }
  );
}

var found = getCountryByCode('DZ');

document.getElementById('output').innerHTML = found[0].name;
<div id="output"></div>

Ответ 3

Сначала преобразуйте эту структуру в объект словаря:

dict = {}
json.forEach(function(x) {
    dict[x.code] = x.name
})

а затем просто

countryName = dict[countryCode]

Для списка стран это не имеет большого значения, но для больших списков этот метод гарантирует мгновенный поиск, в то время как наивный поиск будет зависеть от размера списка.

Ответ 4

Создание более общего ответа showdev.

var getObjectByValue = function (array, key, value) {
    return array.filter(function (object) {
        return object[key] === value;
    });
};

Пример:

getObjectByValue(data, "code", "DZ" );

Ответ 5

// Find first matched object.
// returns object or false if no matched object was found
function findFirstMatchedObjInArray(key, value, haystack) {
    for(var i = 0; i < haystack.length; i++) {
        if(haystack[i][key] === value) return haystack[i];
    }
    return false;
}




// Find all matched objects.
// returns array of objects or false if no matched objects were found
function findAllMatchedObjectsInArray(key, value, haystack) {
    var matchedObjectsArray = [];
    for(var i = 0; i < haystack.length; i++) {
        if(haystack[i][key] === value) matchedObjectsArray.push(haystack[i]);
    }
    return matchedObjectsArray.length ? matchedObjectsArray : false;
}

Также вы можете захотеть использовать строгий поиск:

var people = [
    {name: 'Andy', age: 17},
    {name: 'John', age: '25'},
    {name: 'Ann', age: 25}
];

function findFirstMatchedObjInArray(key, value, haystack, strict) {
for(var i = 0; i < haystack.length; i++) {
    if (typeof strict !== 'undefined' && strict === true) {
        if(haystack[i][key] === value) return haystack[i];
    } else {
        if(haystack[i][key] == value) return haystack[i];
    }
}
return false;
}

// So you will get the following results:
findFirstMatchedObjInArray('age', 25, people);    // {name: 'John', age: '25'}
findFirstMatchedObjInArray('age', 25, people, true);    // {name: 'Ann', age: 25}





function findAllMatchedObjectsInArray(key, value, haystack, strict) {
    var matchedObjectsArray = [];
    for(var i = 0; i < haystack.length; i++) {
        if (typeof strict !== 'undefined' && strict === true) {
            if(haystack[i][key] === value) matchedObjectsArray.push(haystack[i]);
        } else {
            if(haystack[i][key] == value) matchedObjectsArray.push(haystack[i]);
        }

    }
    return matchedObjectsArray.length ? matchedObjectsArray : false;
}

Ответ 6

Просто используйте функцию ES6 find() функционально:

var data=[{name:"Afghanistan",code:"AF"},{name:"Åland Islands",code:"AX"},{name:"Albania",code:"AL"},{name:"Algeria",code:"DZ"}];

let country = data.find(el => el.code === "AL");
// => {name: "Albania", code: "AL"}
console.log(country["name"]);