JS有优雅的方式给对象赋值吗?值为空,则不保留key

场景:

传给ajax的params,参数值为空则不保留key,如
let params = {
    age: this.age ? age : '',
    curPage: 1,
    prePage: 20,
}

这样写如果要判断0或者false就要写很长一串,有更优雅的方法吗?

阅读 9.5k
7 个回答
{
  age: this.age || undefined
}

赋完值后循环一遍对象,没有值的就删除key。
楼上的赋值为undefined后key是还存在的

新手上路,请多包涵

写个公用的 filterEmptyFileds 遍历过滤

    JSON.stringify(params, function(key, value){
        return value
    })

我自己用递归写了一个clean方法,默认清空nullundefined空字符串给了第二个参数。

0false 都是有效参数,为什么要过滤呢?
clean({
    age: this.age,
    curPage: 1,
    prePage: 20,
    name: null,
    job: undefined,
    card: ''
}, true)

两种方法试了下

const age = 0


let param1 = JSON.parse(JSON.stringify({
  curPage:1,
  age: age || undefined
}))

let params2 = {
  ...Object.defineProperties({}, {
    p1: { value: 123, enumerable: true },
    age: {value:age,enumerable:!!age },
  })
}
新手上路,请多包涵
       const states = {
        [userId]: {
          [projectId]: {
            orgId,
            pageSize,
            radio,
            taskId: this.taskId,
            ...active,
          },
        },
      };
      // eslint-disable-next-line consistent-return
      const b = JSON.stringify(states, (key, value) => {
        if (value !== null && value !== '') {
          return value;
        }
      });
      const param = JSON.parse(b);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题