Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.11.2018, 16:19
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2018, 18:46
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 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);
 }));
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2018, 20:00
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

Спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 14.11.2018, 21:03
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

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


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


Не могу понять, что нужно изменить?
Ответить с цитированием
  #6 (permalink)  
Старый 14.11.2018, 21:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Marson,
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2018, 22:06
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

Рони, я не могу разобрать как работает код на ES6
Ответить с цитированием
  #8 (permalink)  
Старый 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" }
Ответить с цитированием
  #9 (permalink)  
Старый 15.11.2018, 00:56
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

На чистом js с помощью for..in и if() можно код написать, что бы в параметрах общей функции была функция callback? У меня с параметрами возникают проблемы, которые находятся в callback(key, value) они не попадают в условие общей функции.
Ответить с цитированием
  #10 (permalink)  
Старый 15.11.2018, 01:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Marson,
не понимаю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется программист на QML для создания интерфейса клиентской программы для общения m.simakov Работа 0 11.02.2016 18:07
Реализация пространства имен SunYang Общие вопросы Javascript 0 09.12.2015 10:38
Как узнать реальный borderLeftWidth для TD в FireFox? gadyuka Events/DOM/Window 2 14.07.2013 11:58
Реализация игрового поля для игры "Точки" last-art Events/DOM/Window 7 22.04.2012 03:18