Javascript如何按字段在数组中搜索[重复]

Posted

技术标签:

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

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

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

  ]

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

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

【问题讨论】:

使用 JSON.parse()。 用for迭代并比较每条记录。 【参考方案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+)。

【讨论】:

以上是关于Javascript如何按字段在数组中搜索[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript中选择对象内的数组内的字段[重复]

按字母数字对javascript数组进行排序[重复]

在 MySQL JSON 字段中的数组中搜索值(Laravel/Lumen)[重复]

如何从 Javascript 中的数组中删除重复项?

将javascript数组中的重复值分组在一起,然后按值名称升序对这些组进行排序

javascript - 如果在子对象中找到值,则搜索嵌套对象数组并返回父对象[重复]