Mysql喜欢使用来自json数组的lodash查询结果

时间:2016-02-19 03:49:28

标签: php json lodash

我有JSON看起来像这样

[{"id":"7","name":"hello","username":"hell7s692","password":"dAggzyFMnBXq3RjoTWoJ3ndBkGhyU6njT2ZPlNfXVV8+XU3vvrTaULUAbPcmsqgj1NpXOpzieKRXWox\/BVcYrA==","email":"hello@gmail.com","mobile_number":"7736527089","address":"hello","date":"24 Jan 2016 12:14:02","active":"1","commission":"5"},
{"id":"7","name":"hello","username":"hell7s692","password":"dAggzyFMnBXq3RjoTWoJ3ndBkGhyU6njT2ZPlNfXVV8+XU3vvrTaULUAbPcmsqgj1NpXOpzieKRXWox\/BVcYrA==","email":"hello@gmail.com","mobile_number":"7736527089","address":"hello","date":"24 Jan 2016 12:14:02","active":"1","commission":"5"}
]

从此我想获得与查询中的条件匹配的新json

即我希望json得到条件

获取名称以字母开头的所有json对象

类似的mysql查询where name like he%

目前我只知道matches,但它只返回完全匹配的数组。

var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false }
];

_.filter(users, _.matches({ 'age': 40, 'active': false }));
// → [{ 'user': 'fred', 'age': 40, 'active': false }]

这将仅返回精确匹配。

1 个答案:

答案 0 :(得分:1)

您可以使用_.startsWith()来匹配您需要的前N个字符,而不是使用_.matches()。例如,如果您想匹配以'他'开头的名称,您可以执行以下操作:

var result = [{
  name: 'hello'
}, {
  name: 'healthy'
}];

_.filter(result, function(obj) {
  return _.startsWith(obj.name, 'he');
});

这应该匹配。

您还可以使用正则表达式来匹配它们:

_.filter(result, function(obj) {
    return obj.name.search(/he/i) === 0;  // i = ignore case
});

'我' in' /他/我'意味着忽略大小写,所以这将匹配name =' Hello'还

search()返回找到的模式的第一个位置,如果找不到则返回-1。因此,如果您需要在字符串中的任何位置查找模式而不是从头开始,则可以检查search()> = 0.所以

_.filter(result, function(obj) {
    return obj.name.search(/he/i) >= 0;
});

将匹配' hello',' shell',' health'''''等等