Javascript 搜索字符串的子部分时如何过滤JSON?
我想在客户端过滤JSON对象。在此之前,我在服务器端使用了:Javascript 搜索字符串的子部分时如何过滤JSON?,javascript,json,search,filter,Javascript,Json,Search,Filter,我想在客户端过滤JSON对象。在此之前,我在服务器端使用了: 从第1行、第2行、第3行类似于%search%的表中选择* 我想在客户端用JSON对象做同样的事情 例如,我可以使用以下JSON对象: [{'Key1' : 'Value1', 'Key2': 'Value2'} {'Key3': 'Value3', 'Key4': 'Value4'}] 当我使用过滤器“ue3”时,我希望它返回[{'Key3':'Value3','Key4':'Value4'}]假设您有这个JavaScript对象
从第1行、第2行、第3行类似于%search%的表中选择*
我想在客户端用JSON对象做同样的事情
例如,我可以使用以下JSON对象:
[{'Key1' : 'Value1', 'Key2': 'Value2'}
{'Key3': 'Value3', 'Key4': 'Value4'}]
当我使用过滤器“ue3”时,我希望它返回
[{'Key3':'Value3','Key4':'Value4'}]
假设您有这个JavaScript对象:
var array = [
{'Key1' : 'Value1', 'Key2': 'Value2'},
{'Key3': 'Value3', 'Key4': 'Value4'}
];
然后,可以使用查找其属性值包含字符串的对象
var searched = 'ue3';
var matches = array.filter(function(v) {
for (key in v) {
if (v[key].indexOf(searched)!=-1) return true;
}
return false;
});
var match = matches.length==0 ? null : matches[0];
请注意,IE 8不支持过滤器,但。假设您有以下JavaScript对象:
var array = [
{'Key1' : 'Value1', 'Key2': 'Value2'},
{'Key3': 'Value3', 'Key4': 'Value4'}
];
然后,可以使用查找其属性值包含字符串的对象
var searched = 'ue3';
var matches = array.filter(function(v) {
for (key in v) {
if (v[key].indexOf(searched)!=-1) return true;
}
return false;
});
var match = matches.length==0 ? null : matches[0];
请注意,IE8不支持筛选器,但支持
“我希望对对象数组执行“所有字段”搜索,并且只返回在其中一个字段中包含部分搜索字符串的对象。”
垫片,垫片,垫片
要使其不区分大小写,请执行以下操作:
function filterValuePart(arr, part) {
part = part.toLowerCase();
return arr.filter(function(obj) {
return Object.keys(obj)
.some(function(k) {
return obj[k].toLowerCase().indexOf(part) !== -1;
});
});
});
“我希望对对象数组执行“所有字段”搜索,并且只返回在其中一个字段中包含部分搜索字符串的对象。”
垫片,垫片,垫片
要使其不区分大小写,请执行以下操作:
function filterValuePart(arr, part) {
part = part.toLowerCase();
return arr.filter(function(obj) {
return Object.keys(obj)
.some(function(k) {
return obj[k].toLowerCase().indexOf(part) !== -1;
});
});
});
@Ping-您可以使用javascript库tjs()。使用它,您可以执行以下操作:
var data = [
{
"Key1": "Value1",
"Key2": "Value2"
},
{
"Key3": "Value3",
"Key4": "Value4"
}
].
res = JSON.search( data, '//*[contains(., 'ue3')]' );
console.log( res[0].key3 );
// Value3
这是一把小提琴:请注意,JSON结构被引用,应该是JSON。
DefiantJS使用一个名为“搜索”的方法扩展了全局对象JSON,并使用XPath查询(这是一种标准化的查询语言),它在数组中返回匹配项(如果未找到匹配项,则返回空数组)。@Ping-您可以使用javascript库DefiantJS()。使用它,您可以执行以下操作:
var data = [
{
"Key1": "Value1",
"Key2": "Value2"
},
{
"Key3": "Value3",
"Key4": "Value4"
}
].
res = JSON.search( data, '//*[contains(., 'ue3')]' );
console.log( res[0].key3 );
// Value3
这是一把小提琴:请注意,JSON结构被引用,应该是JSON。
DefiantJS使用名为“搜索”的方法扩展了全局对象JSON,并使用XPath查询(这是一种标准化的查询语言)返回数组中的匹配项(如果未找到匹配项,则返回空数组)。您的对象是JavaScript对象,而不是JSON对象,因为没有JSON对象。是数据交换格式。您的JSON无效。即使您打算发布JavaScript对象文字语法,也会丢失一个逗号。请发布代表您正在使用的实际代码/数据的有效代码。您的搜索逻辑是什么?这似乎没有什么意义。是否要查找字符串的任何属性值?您的场景非常奇怪:第一条记录的键/列与第二条记录的键/列不同??我想对对象数组执行“所有字段”搜索,只返回在其中一个字段中包含部分搜索字符串的对象。您的对象是JavaScript对象,而不是JSON对象,因为没有JSON对象这样的东西。是数据交换格式。您的JSON无效。即使您打算发布JavaScript对象文字语法,也会丢失一个逗号。请发布代表您正在使用的实际代码/数据的有效代码。您的搜索逻辑是什么?这似乎没有什么意义。是否要查找字符串的任何属性值?您的场景非常奇怪:第一条记录的键/列与第二条记录的键/列不同??我想对对象数组执行“所有字段”搜索,只返回在其字段中包含部分搜索字符串的对象。非常感谢!我的问题不是很清楚。。。“不过我得看看它为什么会起作用。@Ping:请查看MDN,并阅读关于和的内容。我正在查看,谢谢。”。有没有办法使函数不区分大小写?@Ping:是的,通过对两个值调用
.toLowerCase()
来规范大小写。因此,对于函数的第一行addpart=part.toLowerCase()
,然后在最里面的return语句中,doreturn obj[k].toLowerCase().indexOf(part)!=-1;代码>。为了清楚起见,我将添加一个不区分大小写的函数,它可以工作,非常感谢!我的问题不是很清楚。。。“不过我得看看它为什么会起作用。@Ping:请查看MDN,并阅读关于和的内容。我正在查看,谢谢。”。有没有办法使函数不区分大小写?@Ping:是的,通过对两个值调用.toLowerCase()
来规范大小写。因此,对于函数的第一行addpart=part.toLowerCase()
,然后在最里面的return语句中,doreturn obj[k].toLowerCase().indexOf(part)!=-1;代码>。为了清楚起见,我将添加一个不区分大小写的函数。