Как опустить свойство вложенного объекта - PullRequest
0 голосов
/ 04 сентября 2018

Какой лучший способ удалить свойство notneeded из этого массива?

function apiCall(...args) {
  //at this point I need to remove 'notneeded' property from args
};

apiCall({a: 'one', b: 'two'}, {notneeded: '', c: 'three'}, 'hello');

Эти переданные объекты могут быть примитивами, функциями и т. Д., Поэтому в идеале решение должно обрабатываться в каждом случае.

Я создал следующую функцию для этой проблемы, но я уверен, что есть лучшее решение (возможно, с новыми стандартами ECMA).

function omit(args, omitKey) {
  let omitted = [];
  for (let i = 0; i < args.length; i++) {
    if (typeof args[i] === 'object') {
      omitted.push(
        Object.keys(args[i]).reduce((result, key) => {
          if (key !== omitKey) {
            result[key] = args[i][key];
          }
          return result;
        }, {}),
      );
    } else {
      omitted.push(args[i]);
    }
  }
  return omitted;
}

1 Ответ

0 голосов
/ 04 сентября 2018

Не смешивайте итерацию массива с этим методом. Заставьте его выполнить только одно задание.

function omit(obj, keyToOmit) {
    if (typeof obj != "object") return obj;
    const result = {};
    for (const key in obj) {
        if (key != keyToOmit) {
            result[key] = obj[key];
        }
    }
    return result;
}

function apiCall(...args) {
    args = args.map(arg => omit(arg, "notneeded"));
    …
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...