ram*_*esh 35 javascript jquery json jsonp
我的应用程序中有一个JSON字符串/对象.
{"list": [
{"name":"my Name","id":12,"type":"car owner"},
{"name":"my Name2","id":13,"type":"car owner2"},
{"name":"my Name4","id":14,"type":"car owner3"},
{"name":"my Name4","id":15,"type":"car owner5"}
]}
Run Code Online (Sandbox Code Playgroud)
我的应用程序中有一个过滤器框,当我在该框中键入一个名称时,我们必须过滤该对象并显示结果.
例如,如果用户输入"name"并点击搜索,那么我们必须在JSON对象中搜索全名并返回数组,就像MySQL搜索一样......
我的问题是用字符串过滤json对象并返回数组....
T.J*_*der 36
如果你的问题是,是否有一些内置的东西可以搜索你,那么不,没有.您基本上使用任一String#indexOf
或正则表达式来遍历数组以测试字符串.
对于循环,您至少有三个选择:
一个无聊的旧for
循环.
启用ES5的环境(或垫片)Array#filter
.
因为你正在使用jQuery jQuery.map
.
无聊的旧for
循环示例:
function search(source, name) {
var results = [];
var index;
var entry;
name = name.toUpperCase();
for (index = 0; index < source.length; ++index) {
entry = source[index];
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
results.push(entry);
}
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
你在那里用obj.list
as source
和所需的名称片段称为name
.
或者,如果有空白条目或没有名称的条目,请更改if
为:
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
Run Code Online (Sandbox Code Playgroud)
Array#filter
例:
function search(source, name) {
var results;
name = name.toUpperCase();
results = source.filter(function(entry) {
return entry.name.toUpperCase().indexOf(name) !== -1;
});
return results;
}
Run Code Online (Sandbox Code Playgroud)
再次,如果有任何机会存在空白条目(例如,undefined
与缺少相反; filter
将跳过缺少的条目),将内部返回更改为:
return entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1;
Run Code Online (Sandbox Code Playgroud)
jQuery.map
示例(这里我假设jQuery
= $
通常是这种情况; 如果您正在使用,则更$
改为):jQuery
noConflict
function search(source, name) {
var results;
name = name.toUpperCase();
results = $.map(source, function(entry) {
var match = entry.name.toUpperCase().indexOf(name) !== -1;
return match ? entry : null;
});
return results;
}
Run Code Online (Sandbox Code Playgroud)
(entry && entry.name &&
如有必要,再加上那里.)
McG*_*gle 36
你可以循环遍历数组并找到匹配项:
var results = [];
var searchField = "name";
var searchVal = "my Name";
for (var i=0 ; i < obj.list.length ; i++)
{
if (obj.list[i][searchField] == searchVal) {
results.push(obj.list[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
Ana*_*ngh 12
您可以简单地将数据保存在一个变量中,然后使用 JavaScript 的 find(获取单个记录对象)或 filter(获取单个记录数组)方法。
例如 :-
let data = {
"list": [
{"name":"my Name","id":12,"type":"car owner"},
{"name":"my Name2","id":13,"type":"car owner2"},
{"name":"my Name4","id":14,"type":"car owner3"},
{"name":"my Name4","id":15,"type":"car owner5"}
]}
Run Code Online (Sandbox Code Playgroud)
现在使用下面的命令 onkeyup 或输入
获取单个对象
data.list.find( record => record.name === "my Name")
Run Code Online (Sandbox Code Playgroud)
获取单个数组对象
data.list.filter( record => record.name === "my Name")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
113975 次 |
最近记录: |