У меня есть массив таких однородных объектов;
[
{
"foo" : "bar",
"bar" : "sit"
},
{
"foo" : "lorem",
"bar" : "ipsum"
},
{
"foo" : "dolor",
"bar" : "amet"
}
]
Я хотел бы выполнить поиск значений этих объектов (не ключей) с помощью ключевого слова и вернуть массив объектов, содержащих это ключевое слово в любом из значений.
Так, например, с ключевым словом r
я бы получил все объекты («baR» в объекте №1, «loRem» в объекте №2 и «doloR» в объекте №3). С ключевым словом lo
я бы получил объекты 2 и 3 («LOrem» и «doLOr»), с a
я бы получил объекты 1 и 3, («bAr» и «Амет»). Однако с ключевым словом foo
я бы получил пустой массив, поскольку «foo» является ключом и не встречается ни в одном из значений (в отличие от «bar») ... вы поняли идею .
Как мне это сделать? Заранее большое спасибо!
Столкнулся с этой проблемой сегодня, и использование измененной версии предоставленного кода epascarello добилось цели, потому что та версия испытала затруднения, когда объект содержал некоторых других значений, чем строки (как много булевских переменных, например).
console.log('find: ', findIn(arrayOfObjects, searchKey));
const findIn = (arr, searchKey) => {
return arr.filter(obj =>
Object.keys(obj).some(key => {
if (typeof obj[key] === 'string') {
return obj[key].includes(searchKey);
}
})
);
};