Javascript如何按字段搜索数组

时间:2016-09-06 11:39:32

标签: javascript

我有一个保存此数据的变量:

{"main":[
  {"id":"123","name":"name 1"},
  {"id":"234","name":"name 2"}

  ]
}

我知道要搜索的数据的ID。

我的问题是......我如何搜索id 234的名称(例如)是上面的数据?

4 个答案:

答案 0 :(得分:7)

使用Array#filter

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

var object = {
  "main": [{
    "id": "123",
    "name": "name 1"
  }, {
    "id": "234",
    "name": "name 2"
  }]
};
var toFind = "234";
var filtered = object.main.filter(function(el) {
  return el.id === toFind;
});
console.log(filtered);

如果array中只有一个对象,则可以首选for-loop break

var object = {
  "main": [{
    "id": "123",
    "name": "name 1"
  }, {
    "id": "234",
    "name": "name 2"
  }]
};
var toFind = "234";
for (var i = 0, len = object.main.length; i < len; i++) {
  if (object.main[i].id === toFind) {
    break;
  }
}
console.log(object.main[i].name);

答案 1 :(得分:2)

如果ID是唯一的,您可以使用find()

var data = {"main":[
  {"id":"123","name":"name 1"},
  {"id":"234","name":"name 2"}
  ]
}

var name = data.main.find(function(o) {
  return o.id == '234';
}).name;

console.log(name)

答案 2 :(得分:2)

在ES5环境中,如果只期望一个结果,则可以使用Array#some

&#13;
&#13;
[value="SEL2"]
&#13;
&#13;
&#13;

如果您预期有多个结果集,最好使用Array#filter

&#13;
&#13;
var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2" }] },
    result;

data.main.some(function (a) {
    if (a.id === '234') {
        result = a;
        return true;
    }
});

console.log(result);
&#13;
&#13;
&#13;

在ES6环境中,您可以使用Array#find作为第一个找到的元素,但如果还有更多要查找的内容,请使用var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2a" }, { "id": "234", "name": "name 2" }] }, result = data.main.filter(function (a) { return a.id === '234'; }); console.log(result);

&#13;
&#13;
Array#filter
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以使用Array.prototype.filter查找所有匹配的元素,并将它们作为新数组返回。

要查找第一场比赛,您可以使用Array.prototype.find(ES2015 +)。