1

我想在客户端过滤一个 JSON 对象。在那之前,我在服务器端做了一个:

SELECT * FROM table WHERE row1, row2, row3 LIKE %search%

我想用 JSON 对象在客户端做同样的事情。

例如我可以有这个 JSON 对象:

[{'Key1' : 'Value1', 'Key2': 'Value2'}
{'Key3': 'Value3', 'Key4': 'Value4'}]

当我使用过滤器“ue3”时,我希望它返回[{'Key3': 'Value3', 'Key4': 'Value4'}]

4

3 回答 3

7

“我想对一组对象进行所有字段搜索,并且只返回在其中一个字段中包含部分搜索字符串的对象。”

var a = [{'Key1' : 'Value1', 'Key2': 'Value2'},
         {'Key3': 'Value3', 'Key4': 'Value4'}];

var b = filterValuePart(a, "ue3");

function filterValuePart(arr, part) {
    return arr.filter(function(obj) {
        return Object.keys(obj)
                     .some(function(k) { 
                               return obj[k].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; 
                           });
    });
});
于 2013-03-02T15:03:43.757 回答
1

假设你有这个 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 不支持过滤器,但这篇 MDN 文章提供了 shim

于 2013-03-02T14:54:58.990 回答
0

@Ping - 您可以使用 javascript lib DefiantJS ( http://defiantjs.com )。有了它,您可以执行以下操作:

var data = [
   {
      "Key1": "Value1",
      "Key2": "Value2"
   },
   {
      "Key3": "Value3",
      "Key4": "Value4"
   }
].
res = JSON.search( data, '//*[contains(., 'ue3')]' );

console.log( res[0].key3 );
// Value3

这是一个工作小提琴:http:
//jsfiddle.net/hbi99/s8ZVg/

请注意,引用了 JSON 结构,这与 JSON 一样。DefiantJS 使用称为“搜索”的方法和 XPath 查询(这是一种标准化的查询语言)扩展了全局对象 JSON,它返回数组中的匹配项(如果未找到匹配项,则返回空数组)。

于 2014-01-05T09:20:26.217 回答