在减少属性之前过滤

时间:2018-03-05 11:53:21

标签: angular typescript

尝试将Object映射到HttpParams但我想排除任何空,null或未定义的参数。

export function mapToHttpParams(obj: object): HttpParams {
  return Object.getOwnPropertyNames(obj)
    .reduce((p, key) =>
        p.set(key, (typeof obj[key] === 'undefined' || obj[key] === null) ? '' : obj[key]),
      new HttpParams());
}

此代码仍然包含那些空参数,我想做类似的事情:

export function mapToHttpParams(obj: object): HttpParams {
  return Object.getOwnPropertyNames(obj)
    .remove(obj[key] === null && obj[key] === '' && obj[key] === null)
    .reduce((p, key) =>
        p.set(key, (typeof obj[key] === 'undefined' || obj[key] === null) ? '' : obj[key]),
      new HttpParams());
}

找不到合适的方法 - 总是遇到编译错误。

2 个答案:

答案 0 :(得分:0)

这是你要找的东西:

export function mapToHttpParams(obj: { [key: string]: string }): HttpParams {
    const params = Object.getOwnPropertyNames(obj)
        .filter(propName => !!obj[propName])
        .reduce((acc, cur) => { acc[cur] = obj[cur]; return acc; }, {} as { [key: string]: string });
    return new HttpParams({ fromObject: params });
}

答案 1 :(得分:0)

您可以直接通过reduce()方法传递原始对象,而不是先过滤它们

export function mapToHttpParams(obj: object): HttpParams {
  return Object.getOwnPropertyNames(obj)
    .reduce((p, key) => obj[key] == null || obj[key] == '' ? p : p.set(key, obj[key]),
      new HttpParams());
}