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-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);
【讨论】:
为什么要使用过滤器?它将遍历所有数组 @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中选择对象内的数组内的字段[重复]
在 MySQL JSON 字段中的数组中搜索值(Laravel/Lumen)[重复]