Поиск по массиву обьектов по многим параметрам
Здрасте, есть массив обьектов
[
{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"
}
}]
|
даже не знаю , думаю нет,
но оно сработает )))) |
Цитата:
|
не удобен, так как могут быть разные свойства, и функция может тоже принимать всякую ересь )))
|
Цитата:
pattern = [{id:function(id) {
return id > 1 && id < 5
}}];
или все блоки в которых картинки jpg
pattern = [{src:function(src) {
return /\.jpg$/.test(src)
}}];
можно смешивать |
могут быть разние свойства в json'e. и в функцию мы можем кинуть любой обьект, и просто свойства должны проверяться. и возвращяться те обьекты которые подпадают под все входящие свойства
|
Цитата:
{id:1, name : "image_1"}
это ?
[{
id: function(id) {
return id == 1
},
name: function(name) {
return name == "image_1"
}
}]
|
Цитата:
https://javascript.ru/forum/misc/563...tml#post374942 |
ети входные обьекты будут сгенерированы и приходить с иного места, и мы не сможем предугадать какие свойства там будут. Но те которые будут, надо сравниваться с теми которые есть
|
фильтрация массива по заданным параметрам
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)));
|
спасибо, именно оно! а можно сделать без исп. стандартных методов ?
|
Цитата:
посмотри как работают filter, some и every, сделай вместо них на циклах. Object.keys замени на цикл for .. in, с проверкой hasOwnProperty |
| Часовой пояс GMT +3, время: 21:31. |