Просмотр полной версии : Поиск по массиву обьектов по многим параметрам
mariklozik
08.06.2017, 19:16
Здрасте, есть массив обьектов
[
{id: 1, src: "../img/image.jpg", name: "image_1"},
{id: 2, src: "../img/image.jpg", name: "image_2"},
{id: 3, src: "../img/image.jpg", name: "image_3"},
{id: 4, src: "../img/image.jpg", name: "image_4"},
{id: 5, src: "../img/image.jpg", name: "image_5"}
]
Помогите написать функцию которая принимает обьект напр.
{id:1, name : "image_1"}
и выводит
[
{id: 1, src: "../img/image.jpg", name: "image_1"}
]
если передадим массив обьектов, также должно вывести несколько обьектов в массиве
для одного свойства обьекта я и сам написать могу, но если их много - никак.
Спасибо большое
mariklozik,
а можно так ?
[{
id: function(id) {
return id == 1
},
name: function(name) {
return name == "image_1"
}
}]
mariklozik
08.06.2017, 20:05
даже не знаю , думаю нет,
но оно сработает ))))
даже не знаю , думаю нет,
но оно сработает ))))
не осилил ... такой формат поиска вам удобен? да или нет?
mariklozik
08.06.2017, 20:18
не удобен, так как могут быть разные свойства, и функция может тоже принимать всякую ересь )))
так как могут быть разные свойства, и функция может тоже принимать всякую ересь )))
не понял ничего ... но данный формат очень удобен например выбрать все данные с id от 2 до 5
pattern = [{id:function(id) {
return id > 1 && id < 5
}}];
или все блоки в которых картинки jpg
pattern = [{src:function(src) {
return /\.jpg$/.test(src)
}}];
можно смешивать
mariklozik
09.06.2017, 00:10
могут быть разние свойства в json'e. и в функцию мы можем кинуть любой обьект, и просто свойства должны проверяться. и возвращяться те обьекты которые подпадают под все входящие свойства
и в функцию мы можем кинуть любой обьект, и просто свойства должны проверяться. и возвращяться те обьекты которые подпадают под все входящие свойства
что мешает использовать вместо {id:1, name : "image_1"}
это ?
[{
id: function(id) {
return id == 1
},
name: function(name) {
return name == "image_1"
}
}]
Помогите написать функцию которая принимает обьект напр.
структура того что вы ищите, будет похожа на function blender из примера ниже
https://javascript.ru/forum/misc/56382-katalog-s-neskolkimi-filtrami-proverka-na-otobrazhenie-v-t-ch-ispolzuetsya-jquery.html#post374942
mariklozik
09.06.2017, 00:36
ети входные обьекты будут сгенерированы и приходить с иного места, и мы не сможем предугадать какие свойства там будут. Но те которые будут, надо сравниваться с теми которые есть
mariklozik,
:( :( :( ... разговор слепого с глухим
function fn(arr, pattern) {
return arr.filter(function(el) {
return pattern.some(function(mask) {
return Object.keys(mask).every(function(key) {
return el[key] == mask[key]
})
})
})
};
var arr = [
{id: 1, src: "../img/image.jpg", name: "image_1"},
{id: 2, src: "../img/image.jpg", name: "image_2"},
{id: 3, src: "../img/image.jpg", name: "image_3"},
{id: 4, src: "../img/image.jpg", name: "image_4"},
{id: 5, src: "../img/image.jpg", name: "image_5"}
],
pattern = [{id:1, name : "image_1"}];
alert(JSON.stringify(fn(arr, pattern)));
mariklozik
09.06.2017, 09:22
спасибо, именно оно! а можно сделать без исп. стандартных методов ?
Alexandroppolus
09.06.2017, 10:34
а можно сделать без исп. стандартных методов ?
странное пожелание..
посмотри как работают filter, some и every, сделай вместо них на циклах.
Object.keys замени на цикл for .. in, с проверкой hasOwnProperty
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot