对象数组

时间:2015-03-26 12:29:50

标签: javascript arrays json object

我有一个对象数组,其中一些是

的例子
[
    {
        "lang_code":        "eng",
        "site_language":    "1",
        "name":         "English"
    },
    {
        "lang_code":        "afr",
        "site_language":    "1",
        "name":         "Afrikaans"
    },
    {
        "lang_code":        "ale",
        "site_language":    "0",
        "name":         "Aleut"
   },
]

我希望能够在整个数组中搜索特定的lang_code,让我们说我使用eng。我想在整个数组中搜索eng。如果它在那里,我希望它返回English,如果没有,我希望它返回invalid。关于这个的任何想法?

5 个答案:

答案 0 :(得分:2)

您可以使用filter

function findLang(arr, code) {
  var filtered = arr.filter(function (el) {
    return el.lang_code === code;
  });

  // filter returns an array of objects that match the criteria
  // if the array is not empty return the language,
  // otherwise return 'invalid'
  return filtered.length > 0 ? filtered[0].name : 'invalid';
}

findLang(arr, 'eng'); // English

DEMO

如果您想将map添加到混合中而不是使用该三元操作(但这很可能会更慢,并且不会提供任何额外的好处):

function findLang(arr, code) {
  return arr.filter(function (el) {
    return el.lang_code === code;
  }).map(function (el) {
    return el.name;
  })[0] || 'invalid';
}

DEMO

答案 1 :(得分:2)

上面的findById函数的通用且更灵活的版本:

// array = [{key:value},{key:value}]
function objectFindByKey(array, key, value) {
    for (var i = 0; i < array.length; i++) {
        if (array[i][key] === value) {
            return array[i];
        }
    }
    return null;
}

var array = your array;
var result_obj = objectFindByKey(array, 'lang_code', 'eng');

Click here for demo

答案 2 :(得分:1)

for循环怎么样?类似的东西:

function find_lang(input_arr, lang_code) {
   for(var i = 0; i < input_arr.length; i++) {
      var o = input_arr[i];
      if( o.lang_code === lang_code ) {
         return o.name;
      }
   }

   return "invalid";
}

答案 3 :(得分:1)

Underscore.js有一些有用的助手:http://underscorejs.org/

E.g查找:

  

查看列表中的每个值,返回第一个值   传递真值测试(谓词),或者如果没有值传递则未定义   测试。一旦找到可接受的元素,函数就会返回,   并且不会遍历整个列表。

var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    => 2

其中:

  

查看列表中的每个值,返回所有的数组   包含属性中列出的所有键值对的值。

_.where(listOfPlays, {author: "Shakespeare", year: 1611});
=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
    {title: "The Tempest", author: "Shakespeare", year: 1611}]

答案 4 :(得分:0)

你可以这样做:

// configure your parameters
function checkArr(){
    for (var i = 0; i < x.length; i++){
        if (x[i].lang_code == "eng")
            return "English";
    }
    return "invalid";
}

var x = [
{
    "lang_code":        "eng",
    "site_language":    "1",
    "name":         "English"
},
{
    "lang_code":        "afr",
    "site_language":    "1",
    "name":         "Afrikaans"
},
{
    "lang_code":        "ale",
    "site_language":    "0",
    "name":         "Aleut"
}
];