我想根据 JavaScript 中的输入从主要 JSON 批量数据中提取 JSON 条目。主要 JSON 数据中的每个条目都有其自己的唯一 ID,但过滤器应基于文本标识符而不是 ID。例如,我想检索包含单词
burg
(Burg
、BURG
、bUrg
等)或任何其他给定品种的所有条目。这当然也适用于其他搜索词。我不具备执行此操作的 JavaScript 技能。
在下面给出的数据中,这应该返回 3 个结果。显然,结果应该是完全相同的 JSON 格式。
JSON 示例:
{"type":"FeatureCollection","features":[
{"id":1,"text":"Cape Town"},
{"id":2,"text":"Kimberley"},
{"id":3,"text":"Beaufort West"},
{"id":4,"text":"Johannesburg Park"},
{"id":5,"text":"Germiston"},
{"id":6,"text":"Pietermaritzburg"},
{"id":7,"text":"Durban"},
{"id":8,"text":"Bellville"},
{"id":9,"text":"Wellington"},
{"id":10,"text":"Huguenot"},
{"id":11,"text":"Worcester"},
{"id":12,"text":"Matjiesfontein"},
{"id":13,"text":"Laingsburg"},
{"id":14,"text":"Prince Albert"},
{"id":15,"text":"Hutchinson"},
{"id":16,"text":"De Aar"},
{"id":17,"text":"Warrenton"}
]}
LIKE
运算符。就像HTML一样,由于序列化,正则表达式无法完全解析JSON。
然而,JSON.parse
之后的过滤非常容易;你可以使用
Array.prototype.filter()
方法:
var s = '{"type":"FeatureCollection","features":[{"id":1,"text":"Cape Town"},{"id":2,"text":"Kimberley"},{"id":3,"text":"Beaufort West"},{"id":4,"text":"Johannesburg Park"},{"id":5,"text":"Germiston"},{"id":6,"text":"Pietermaritzburg"},{"id":7,"text":"Durban"},{"id":8,"text":"Bellville"},{"id":9,"text":"Wellington"},{"id":10,"text":"Huguenot"},{"id":11,"text":"Worcester"},{"id":12,"text":"Matjiesfontein"},{"id":13,"text":"Laingsburg"},{"id":14,"text":"Prince Albert"},{"id":15,"text":"Hutchinson"},{"id":16,"text":"De Aar"},{"id":17,"text":"Warrenton"}]}';
var input = "burg";
var o = JSON.parse(s);
o.features = o.features.filter(e => RegExp(input, 'i').test(e.text));
console.log(JSON.stringify(o));