如何省略嵌套对象的属性

时间:2018-09-04 13:34:00

标签: javascript ecmascript-6

从此数组中删除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 :(得分:0)

不要将数组迭代混入该方法中。使其仅执行一项任务。

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"));
    …
}