通过其中一个字段获取数组中的对象

时间:2014-08-04 06:15:00

标签: javascript arrays object

对不起,我是JS的新手;我有一个对象数组;如何获取具有键" user_key3"的对象的名称?并且显然没有循环而且有条件。

arr = [{
        "name": "user1",
        "key": "user_key1"
},{
        "name": "user3",
        "key": "user_key3"
},{
        "name": "user2",
        "key": "user_key2"
}]

如果您需要更多说明,请告诉我

由于

7 个答案:

答案 0 :(得分:2)

您必须迭代并检查密钥

var user_name;

for (var i=0; i<arr.length; i++) {
    if ( arr[i].key === 'user_key3' ) {
        user_name = arr[i].name;
        break;
    }
}

FIDDLE

您已编辑了要包含的问题

  

显然没有循环并且有条件

但是循环和条件是迄今为止最有效和跨浏览器的方式,所以为什么你&#34;显然&#34;不想要这个?

答案 1 :(得分:2)

你可以通过功能方式来实现,就像这样

var name;
arr.forEach(function(currentObject) {
    if (currentObject.key === "user_key3") {
        name = currentObject.name;
    }
});

如果你想在第一场比赛中短路,你可以使用Array.prototype.some,就像这样

var name;
arr.some(function(currentObject) {
    if (currentObject.key === "user_key3") {
        name = currentObject.name;
        return true;
    }
    return false;
});

答案 2 :(得分:2)

OP提到显然没有循环且有条件。我会这样做:

arr = [{
    "name": "user1",
    "key": "user_key1"
},{
    "name": "user3",
    "key": "user_key3"
},{
    "name": "user2",
    "key": "user_key2"
}];

var keyValMap = arr.map(function(n) { return n.key } );
var arrIndex = keyValMap.indexOf('user_key3');
alert(arr[arrIndex].name);

<强> Fiddle

答案 3 :(得分:1)

低效而简洁的解决方案

var keyarr = arr.map(function(x) { return x.key } );
//keyarr is list of keys
var index=keyarr.indexOf("user_key3");
//arr[index] is your answer. Index will be -1 if the key doesn't exist

答案 4 :(得分:1)

通常,查找满足数组中某些任意属性的项需要您遍历数组:

function find(arr, name) {
  for (var i=0; i<arr.length; i++) {
    if ( arr[i].key === name ) {
      return arr[i];
    }
  }
}

然后找到它,

var obj = find(arr, 'user_key3');

使用更多功能性解决方案来查找项目也很好,但您仍然会以某种方式循环。

但是,如果按键进行查找,则键值对数组不是最佳数据结构。我建议直接使用一个对象:

var map = {
  'user_key1': 'user1',
  'user_key2': 'user2',
  'user_key3': 'user3'
}

然后查找就是:

map['user_key3'];

答案 5 :(得分:1)

试试这个 - underscore.js

您的示例 -

_.where(arr, {key: "user_key3"});

答案 6 :(得分:1)

你不能用Javascript中的对象做这样的事情。虽然在这里你有回调和循环的组合:

arr = [{
        "name": "user1",
        "key": "user_key1"
  },{
        "name": "user3",
        "key": "user_key3"
},{
        "name": "user2",
        "key": "user_key2"
}];

arr.forEach(function(elme){

   for(var g in elme)
   {  
     if(elme[g] == 'user_key3') 
     {
       console.log("Found the value: "+g+" : "+elme[g]);
     };
   }
});