Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   реализация Array.filter для объектов: (https://javascript.ru/forum/misc/75856-realizaciya-array-filter-dlya-obektov.html)

Marson 12.11.2018 16:19

реализация Array.filter для объектов:
 
Напишите свою реализацию Array.filter для объектов:

var phone = {
brand: "meizu",
model: "m2",
ram: 2,
color: "black",
};

filter(phone,function(key,value){
return (key == "color" || value == 2);
});
должно вернуть


{
ram: 2,
color: "black",
}
Для удаления пары ключ-значение используйте delete.


var phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black",
};

function filter(object){
  for(var key in object){
    console.log(key);
  }
}
filter(phone, function(key){
  return (key === 'model' || value === '2');
});


Помогите разобраться? Как сделать value-значением и нужно добавить метод forEach()?

Dilettante_Pro 12.11.2018 18:46

???
var phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black"
};

function filter(object,search,val){
  var result = {};
  for(var key in object){
    if(search == key || object[key] == val)  result[key] = object[key];
  }
  return result;
}
console.log(filter(phone, "color",2));


var phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black"
};

function filter(object,search,val){
  for(var key in object){
    if(search != key && object[key] != val)  delete object[key];
  }
}
filter(phone, "color",2);
console.log(phone);

рони 12.11.2018 19:48

:write:
var phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black"
};

function filter(object, fn){
 return Object.entries(object).filter(e => fn(...e)).reduce((a,[b, c] = b) => (a[b] = c, a),{})

}
console.log(filter(phone,function(key,value){
return (key == "color" || value == 2);
 }));

Marson 12.11.2018 20:00

Спасибо:thanks:

Marson 14.11.2018 21:03

Сначала сделать обобщённую функцию, а потом с помощью функции callback..


filter(phone,function(key,value){
return (key == "color" || value == 2);
});


Не могу понять, что нужно изменить?

рони 14.11.2018 21:23

Marson,
:-?

Marson 14.11.2018 22:06

Рони, я не могу разобрать как работает код на ES6

рони 14.11.2018 22:51

Marson,
Object.entries(object)
создали массив массивов из key и value
[ [ "brand", "meizu" ], [ "model", "m2" ], [ "ram", 2 ], [ "color", "black" ] ]

.filter(e => fn(...e))
отфильтровали key == "color" || value == 2
[ [ "ram", 2 ], [ "color", "black" ] ]

.reduce((a,[b, c] = b) => (a[b] = c, a),{})
создали обьект
{ "ram": 2, "color": "black" }

Marson 15.11.2018 00:56

На чистом js с помощью for..in и if() можно код написать, что бы в параметрах общей функции была функция callback? У меня с параметрами возникают проблемы, которые находятся в callback(key, value) они не попадают в условие общей функции.

рони 15.11.2018 01:43

Marson,
не понимаю


Часовой пояс GMT +3, время: 09:18.