Mysql like query result using lodash from json array

假如想象 提交于 2019-12-04 06:05:54

问题


I have JSON look like this

[{"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"}
]

From this i want to get the new json that matches the condition in like query

ie i want to get the json with the condition

get all the json object with name start with a letter

Similar mysql query where name like he%

Currently i know about only matches but it returns the array with only exact match.

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 }]

This will returns with only exact match.


回答1:


Instead of using _.matches(), you can use _.startsWith() to match the first n-characters you need to. For example, if you want to match name starting with 'he', you can do something like this:

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

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

This should match both.

You can also use regular expression to match them:

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

'i' in '/he/i' means ignore case, so this will match name = 'Hello' also.

search() returns the 1st position of the pattern it found, it returns -1 if not found. So if you need to find a pattern anywhere in a string instead of starting from the beginning, you can check for search() >= 0. So

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

will match 'hello', 'shell', 'healthy', 'the', and etc



来源:https://stackoverflow.com/questions/35496966/mysql-like-query-result-using-lodash-from-json-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!