Javascript How to search in array by field
本问题已经有最佳答案,请猛点这里访问。
我有一个保存这些数据的变量:
1 2 3 4 5 6 | {"main":[ {"id":"123","name":"name 1"}, {"id":"234","name":"name 2"} ] } |
我知道我要搜索的数据的ID。
我的问题是......我如何搜索id 234的名称(例如)是上面的数据?
使用
The
filter() method creates a new array with all elements that pass the test implemented by the provided function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); |
如果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); |
在ES5环境中,如果只期望一个结果,则可以使用
1 2 3 4 5 6 7 8 9 10 11 | 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); |
当您期望多个结果集时,最好使用
1 2 3 4 5 6 | 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环境中,您可以使用
1 2 3 4 | var data = {"main": [{"id":"123","name":"name 1" }, {"id":"234","name":"name 2" }] }, result = data.main.find(a => a.id === '234'); console.log(result); |
如果id是唯一的,您可以使用
1 2 3 4 5 6 7 8 9 10 11 | 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) |
您可以使用Array.prototype.filter查找所有匹配的元素并将它们作为新数组返回。
要查找第一个匹配项,可以使用Array.prototype.find(ES2015 +)。