Поиск в многомерном объекте/массиве
Всем привет!
Помогите решить такую проблему: Есть массив:
var people = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "hummus" }
];
Необходимо сделать поиск с созданием нового массива >john // => [{ "name": "john", "dinner": "sushi" }, { "name": "john", "dinner": "hummus" }] Делаю так:
people.filter(function (person) { return person.name== "john" });
Но если регистр букв разный, то ничего не находит. С помощью .toUpperCase() ошибку выдает, и вообще в данном примере поиск ведется только по имени, а надо чтоб искало по всем объектам. |
tk.stas,
Цитата:
<script>
var people = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "hummus" }
];
var str = "john"
var obj = people.filter(function (person) { return person.name.toUpperCase() == str.toUpperCase() });
document.write(JSON.stringify(obj, null, 4))
</script>
|
Цитата:
<script>
var people = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "hummus" }
];
var str = "sushi";
var obj = people.filter(function (person) { return Object.values(person).some(function(val) {
return val.toUpperCase() == str.toUpperCase()
})});
document.write(JSON.stringify(obj, null, 4))
</script>
|
Цитата:
var people = [
{ "name": "bob", "dinner": [ "sushi", "pizza" ] },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "hummus" }
];
|
tk.stas,
<script>
var people = [
{ "name": "bob", "dinner": [ "sushi", "pizza" ] },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "hummus" }
];
var str = "sushi";
function fn(obj) {
return Object.values(obj).some(function(val) {
if(Array.isArray(val)) return fn(val);
return val.toUpperCase() == str.toUpperCase()
})
}
var obj = people.filter(fn);
document.write(JSON.stringify(obj, null, 4))
</script>
|
Цитата:
|
Цитата:
|
Цитата:
|
tk.stas,
return (val + '').toUpperCase() == (str + '').toUpperCase() |
| Часовой пояс GMT +3, время: 23:03. |