Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 搜索字符串的子部分时如何过滤JSON?_Javascript_Json_Search_Filter - Fatal编程技术网

Javascript 搜索字符串的子部分时如何过滤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对象

我想在客户端过滤JSON对象。在此之前,我在服务器端使用了:

从第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()
来规范大小写。因此,对于函数的第一行add
part=part.toLowerCase()
,然后在最里面的return语句中,do
return obj[k].toLowerCase().indexOf(part)!=-1;。为了清楚起见,我将添加一个不区分大小写的函数,它可以工作,非常感谢!我的问题不是很清楚。。。“不过我得看看它为什么会起作用。@Ping:请查看MDN,并阅读关于和的内容。我正在查看,谢谢。”。有没有办法使函数不区分大小写?@Ping:是的,通过对两个值调用
.toLowerCase()
来规范大小写。因此,对于函数的第一行add
part=part.toLowerCase()
,然后在最里面的return语句中,do
return obj[k].toLowerCase().indexOf(part)!=-1;。为了清楚起见,我将添加一个不区分大小写的函数。