Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2021, 21:02
Новичок на форуме
Отправить личное сообщение для DenisZlgst Посмотреть профиль Найти все сообщения от DenisZlgst
 
Регистрация: 02.12.2021
Сообщений: 1

Помогите пожалуйста, если можно с объяснением
Не могу решить задачу.


Написать функцию, которая принимает в качестве параметра объект и
возвращает массив методов принимаемого объекта.
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2021, 21:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

DenisZlgst,

const foo = obj => Object.keys(obj);

https://developer.mozilla.org/ru/doc...ts/Object/keys
Ответить с цитированием
  #3 (permalink)  
Старый 02.12.2021, 22:17
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от рони
const foo = obj => Object.keys(obj);
Ну не....
Это будет массив всех свойств, а нужны методы

const foo = obj => Object.keys(obj).filter(m => typeof obj[m] === 'function')


Но все равно непонятно какие именно методы нужны. Тут вернутся только собственные перечислимые. Еще могут быть и не перечислимые, и методы прототипов... И заданные не строками, а символами (Symbol)... В том числе и в прототипах.

Последний раз редактировалось voraa, 02.12.2021 в 22:21.
Ответить с цитированием
  #4 (permalink)  
Старый 03.12.2021, 02:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Вот те универсальная шляпа.)
/**
 * @callback Filter
 * @param value
 * @param {string | symbol} key
 * @param {?object} getset
 * @param {?function} getset.get
 * @param {?function} getset.set
 * @returns {boolean}
 */

/**
 * @typedef Options
 * @type {object}
 * @property {boolean=true} deep
 * @property {boolean=true} getters
 * @property {boolean=getters} setters
 * @property {boolean=false} symbols
 * @property {boolean=} enumerable
 * @property {boolean=} configurable
 * @property {boolean=} writable
 */

/**
 * @param {object} obj
 * @param {Filter} [filter]
 * @param {Options} [options]
 * @returns {string[]}
 */

function getPropertyKeys(obj, filter, options) {
  if (typeof filter !== 'function') {
    options = filter;
    filter = (value, key) => true;
  }

  const {
    deep = true,
    getters = true,
    setters = getters,
    symbols = false,
    ...descriptorOptions
  } = options ?? {};

  const not = (descriptor, key) => key in descriptorOptions && descriptorOptions[key] !== descriptor[key];
  
  const {
    getOwnPropertySymbols,
    getPrototypeOf,
    getOwnPropertyDescriptors,
    keys,
    assign,
    prototype
  } = Object;
  
  let current = obj;
  let descriptors;

  do {
    descriptors = assign(getOwnPropertyDescriptors(current), descriptors);

    if (current === prototype) break;

    current = getPrototypeOf(current);
  } while (deep && current);

  let list = keys(descriptors);
  if (symbols)
    list = list.concat(getOwnPropertySymbols(descriptors));

  return list.filter(key => {
    const descriptor = descriptors[key];
    const { get, set, value } = descriptor;

    if (not(descriptor, 'enumerable'))
      return false;

    if (not(descriptor, 'configurable'))
      return false;
    
    if (get || set) {
      return (setters || setters) 
      	&& filter(get && get.call(obj), key, { get, set });
    }
    
    if (not(descriptor, 'writable'))
      return false;

    return filter(value, key);
  });
}

getPropertyKeys([], value => typeof value === 'function', {
  symbols: true
});
__________________
29375, 35

Последний раз редактировалось Aetae, 03.12.2021 в 07:55.
Ответить с цитированием
  #5 (permalink)  
Старый 03.12.2021, 07:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Aetae,
Ответить с цитированием
  #6 (permalink)  
Старый 03.12.2021, 07:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Aetae,
строки 32 - 34 верно или надо поменять местами?
Ответить с цитированием
  #7 (permalink)  
Старый 03.12.2021, 07:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

рони, верно, это была фишка со свапом: [a, b] = [b, a], чтоб типа obj [,filter [, options]]. Я конечно намудрил там излишне, поправил по-человечски.)
__________________
29375, 35

Последний раз редактировалось Aetae, 03.12.2021 в 07:45.
Ответить с цитированием
  #8 (permalink)  
Старый 03.12.2021, 07:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Aetae,
ясно.
Ответить с цитированием
  #9 (permalink)  
Старый 03.12.2021, 07:45
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Aetae
это фишка со свапом: [a, b] = [b, a], чтоб типа obj [,filter [, options]].
Ну обычно так делают, если какой то параметр просто можно пропустить.
Либо (object, filter, options)
либо (object, options)
Менять местами - излишество.
Хотя правильнее, наверно, (object, options, filter)
Ответить с цитированием
  #10 (permalink)  
Старый 03.12.2021, 07:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Aetae,
интересная фишка!!! +++
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Помогите пожалуйста вычислить общую сумму katalizator Общие вопросы Javascript 15 22.03.2013 16:26
Помогите пожалуйста, очень срочно!!! PAMAC AJAX и COMET 1 20.10.2009 23:38
можно ли, если да то как удалить строки из таблицы Avaria Я не знаю javascript 3 11.06.2009 03:03
Помогите, пожалуйста zashibis Общие вопросы Javascript 1 02.12.2008 14:07