Javascript找到json值

Tro*_*sta 44 javascript json

我需要在json国家列表中搜索.json就像:

[ 
{"name": "Afghanistan", "code": "AF"}, 
{"name": "Åland Islands", "code": "AX"}, 
{"name": "Albania", "code": "AL"}, 
{"name": "Algeria", "code": "DZ"}
]
Run Code Online (Sandbox Code Playgroud)

我只从数据库中获取代码并输出整个名称.所以,如果我得到"AL",我想从json"阿尔巴尼亚"取回

sho*_*dev 103

我建议使用JavaScript的Array方法filter()按值标识元素.它通过使用"函数来测试数组的每个元素来过滤数据.返回true以保留元素,否则返回false"

以下函数过滤数据,仅返回回调返回的值true,即where data.code等于请求的国家/地区代码.

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

var found = getCountryByCode('DZ');
Run Code Online (Sandbox Code Playgroud)

见下面的演示:

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;
Run Code Online (Sandbox Code Playgroud)
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

这是一个JSFiddle.

  • 这个看起来像我的答案。更紧凑。 (2认同)
  • 我知道这个答案已经超过 5 年了,但是它返回“仅回调返回 true 的值”的说法是不正确的。它返回一个 **objects** 的 **array**,其中每个匹配对象中的值都会导致回调返回 true。您的代码确实认识到这一点,但我觉得该声明具有误导性 (2认同)

Bra*_*tie 61

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
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Tropicalista实际上,您应该将过滤器逻辑移动到数据库引擎!在过滤,排序或分组时,DB始终是最快的(假设您设置了正确的索引). (2认同)
  • 它缺少昏迷:for(var i = 0; i <obj.length**;**i ++){ (2认同)

geo*_*org 19

首先将此结构转换为"字典"对象:

dict = {}
json.forEach(function(x) {
    dict[x.code] = x.name
})
Run Code Online (Sandbox Code Playgroud)

然后简单地说

countryName = dict[countryCode]
Run Code Online (Sandbox Code Playgroud)

对于国家列表而言这并不重要,但对于较大的列表,此方法可确保即时查找,而天真搜索将取决于列表大小.


小智 10

使showdev答案更加通用.

var getObjectByValue = function (array, key, value) {
    return array.filter(function (object) {
        return object[key] === value;
    });
};
Run Code Online (Sandbox Code Playgroud)

例:

getObjectByValue(data, "code", "DZ" );
Run Code Online (Sandbox Code Playgroud)


Pen*_*Liu 10

只需以功能性方式使用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"]);
Run Code Online (Sandbox Code Playgroud)

或Lodash _.find

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

let country = _.find(data, ["code", "AL"]);
// => {name: "Albania", code: "AL"}
console.log(country["name"]);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)