【问题标题】:Javascript How to search in array by field [duplicate]Javascript如何按字段在数组中搜索[重复]
【发布时间】:2017-01-13 20:40:34
【问题描述】:

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

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

  ]
}

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

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

【问题讨论】:

  • 使用 JSON.parse()。
  • 用for迭代并比较每条记录。

标签: javascript


【解决方案1】:

使用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-loopbreak

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);

【讨论】:

  • 为什么要使用过滤器?它将遍历所有数组
  • @pwolaq – OP 可能有多个具有相似 ID 的对象...
  • OP 说他想得到一个名字,而不是有名字的对象数组
  • @pwolaq - 不确定谁是正确的,我也添加了另一种方法......我希望它也能涵盖你的观点......
【解决方案2】:

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

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);

当您期望多个结果集时,您最好使用Array#filter

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);

在 ES6 环境中,您可以使用Array#find 作为第一个找到的元素,但如果要查找更多,则使用Array#filter

var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2" }] },
    result = data.main.find(a => a.id === '234');

console.log(result);

【讨论】:

    【解决方案3】:

    如果 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)

    【讨论】:

    • find 是 ES6 的一部分
    • 更不用说如果没有给定id的元素会导致错误
    【解决方案4】:

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

    要查找第一个匹配项,您可以使用 Array.prototype.find (ES2015+)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      相关资源
      最近更新 更多