Использование Lodash для поиска частичной строки в любом значении свойства объекта - PullRequest
0 голосов
/ 29 мая 2019

Я хочу использовать Lodash для возврата true, когда объект содержит любое из своих значений, совпадающее с частичной строкой. Я пробовал это с _.includes следующим образом.

const ob = {first: "Fred", last: "Flintstone",}
const search = "stone";
const result = _.includes(ob, search)
console.log(result); // false

Я также пытался использовать регулярное выражение вместо строки для поискового запроса.

const search = /stone/gi;

Оба раза result возвращает false. Я хочу, чтобы result вернул true. Как я могу сделать это в Lodash?

Ответы [ 4 ]

1 голос
/ 29 мая 2019

Вы можете использовать lodash _.some() (который работает с объектами), и lodash / vanilla включает, чтобы найти, имеет ли значение текущего свойства строку поиска:

const includesValue = (val, obj) => _.some(obj, v => _.includes(v, val))

const obj = {first: "Fred", last: "Flintstone",}
const search = "stone";
const result = includesValue(search, obj)

console.log(result); // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

И версия lodash / fp:

const includesValue = val => _.some(_.includes(val))

const obj = {first: "Fred", last: "Flintstone",}
const search = "stone";
const result = includesValue(search)(obj)

console.log(result); // false
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
1 голос
/ 29 мая 2019

Вы можете найти частичную строку в массиве значений объекта следующим образом.

const ob = {
  first: "Fred",
  last: "Flintstone"
}
const search = "stone"
const isFound = Boolean(Object.values(ob).find(item => item.includes(search)))
console.log(isFound)

И, согласно предложению @ Kobe, вы можете использовать some вместо оценки результата find с Boolean().

const ob = {
  first: "Fred",
  last: "Flintstone"
}
const search = "stone"
const isFound = Object.values(ob).some(item => item.includes(search))
console.log(isFound)
0 голосов
/ 29 мая 2019

Вы можете использовать _filter, если хотите использовать lodash.

const ob = {first: "Fred", last: "Flintstone",}
var filteredOb = _.filter(ob, function(elem) {
    return elem.indexOf("stone") > -1;
});
console.log(filteredOb);
0 голосов
/ 29 мая 2019

Это не то, как работает lodash.

Вы должны искать значения объекта, а не сам объект.И вы должны проверять каждое значение по очереди.

Также для этого вам не нужен lodash.

const ob = {first: "Fred", last: "Flintstone",}
const search = "stone";
const result = Object.values(ob).some(value => value.indexOf(search) !== -1);
console.log(result); // true
...