Поиск в многомерном объекте/массиве
Всем привет!
Помогите решить такую проблему: Есть массив: 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, время: 18:28. |