Javascript 对象数组

Javascript 对象数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我有一个对象数组,其中一个例子是 [ { "lang_code": "eng", "site_language": "1", "name": "English" }, { "lang_code": "afr", "site_language": "1", "name": "Afrikaans" },

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

[
    {
        "lang_code":        "eng",
        "site_language":    "1",
        "name":         "English"
    },
    {
        "lang_code":        "afr",
        "site_language":    "1",
        "name":         "Afrikaans"
    },
    {
        "lang_code":        "ale",
        "site_language":    "0",
        "name":         "Aleut"
   },
]
我希望能够在整个数组中搜索特定的语言代码,比如说我使用英语。我希望在整个数组中搜索英语。如果有,我希望它返回英语,如果没有,我希望它返回无效。有什么想法吗?

来个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";
}
来一个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";
}
您可以使用:

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

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

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

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

你可以这样做:

// 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"
}
];

你可以这样做:

// 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"
}
];

Underline.js为这类事情提供了一些有用的帮助:

例如,查找:

查看列表中的每个值,返回第一个 通过真值测试谓词,如果没有值通过 测验函数在找到可接受的元素后立即返回, 而且不会遍历整个列表

其中:

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


Underline.js为这类事情提供了一些有用的帮助:

例如,查找:

查看列表中的每个值,返回第一个 通过真值测试谓词,如果没有值通过 测验函数在找到可接受的元素后立即返回, 而且不会遍历整个列表

其中:

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


上述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');

上述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');
对于循环,筛选器/映射组合。。。循环、过滤器/映射组合的大量选项。。。有很多选择