12.11.2018, 16:19
|
Аспирант
|
|
Регистрация: 14.08.2018
Сообщений: 65
|
|
реализация 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()?
Последний раз редактировалось Marson, 12.11.2018 в 16:57.
|
|
12.11.2018, 18:46
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
???
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);
Последний раз редактировалось Dilettante_Pro, 12.11.2018 в 18:51.
|
|
12.11.2018, 19:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
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);
}));
|
|
12.11.2018, 20:00
|
Аспирант
|
|
Регистрация: 14.08.2018
Сообщений: 65
|
|
Спасибо
|
|
14.11.2018, 21:03
|
Аспирант
|
|
Регистрация: 14.08.2018
Сообщений: 65
|
|
Сначала сделать обобщённую функцию, а потом с помощью функции callback..
filter(phone,function(key,value){
return (key == "color" || value == 2);
});
Не могу понять, что нужно изменить?
|
|
14.11.2018, 21:23
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Marson,
|
|
14.11.2018, 22:06
|
Аспирант
|
|
Регистрация: 14.08.2018
Сообщений: 65
|
|
Рони, я не могу разобрать как работает код на ES6
|
|
14.11.2018, 22:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
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" }
|
|
15.11.2018, 00:56
|
Аспирант
|
|
Регистрация: 14.08.2018
Сообщений: 65
|
|
На чистом js с помощью for..in и if() можно код написать, что бы в параметрах общей функции была функция callback? У меня с параметрами возникают проблемы, которые находятся в callback(key, value) они не попадают в условие общей функции.
|
|
15.11.2018, 01:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Marson,
не понимаю
|
|
|
|