为了账号安全,请及时绑定邮箱和手机立即绑定

在js中构造json问题

在js中构造json问题

Cats萌萌 2018-09-02 12:30:28
问题描述在js中构造json的时候如何根据一个值来决定包不包含这个节点?问题出现的环境背景及自己尝试过哪些方法当然可以用很多if来搞,比如            let req = {};            if(this.timeSelect.start != ''){                 req.startTs = this.timeSelect.start;             }            if(this.timeSelect.end != ''){                 req.endTs = this.timeSelect.end;             }            if(this.userId != ''){                 req.userId = this.userId;             }            if(this.auditType != '1'){                 req.checkType = this.auditType;             }            if(this.opter != ''){                 req.operator = this.opter;             }            if(this.auditStatus != '0'){                 req.result = this.auditStatus ;             }你期待的结果是什么?实际看到的错误信息又是什么?大神们有什么好的简约的办法么?
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

/**
 * 
 * @param {Object} sources 传入一个源数据Obj
 * @param {Array} rule 传入一个规则数组 
 * @param {Array} key 传入需要判断的key(sources的属性)
 * key要和rule对应
 */function assigment(sources, rule, key){    var target = {}    for(let i = 0; i < key.length; i ++){        if(rule[i]){
            target[key[i]] = sources[key[i]]
        }
    }    return target
}var sources = {a: 1, b: '', c: '0'}var rule = [
    sources.a != '',
    sources.b != '',
    sources.c != '0',
]var key = ['a', 'b', 'c'];var target = assigment(sources, rule, key)

console.log(target)


查看完整回答
反对 回复 2018-09-02
?
当年话下

TA贡献1890条经验 获得超9个赞

你这key值都不对应,估计没对接好吧,只能自己映射了,不过为了优雅和减少代码量,可以简单封装一下:

    /**
    * k: req要挂载的key
    * p: 源 key
    * c: 上下文取值
    * v: 不期望的值
    **/
    function setVal({ k, p, c, v = '' }) {
      const _v = c[p]      if (_v != v) req[k] = _v
    }
    var arr = [
      { k: startTs, p: start, c: this.timeSelect },
      { k: endTs, p: end, c: this.timeSelect },
      { k: userId, p: userId, c: this },
      { k: checkType, p: auditType, c: this, v: '1' }
    ]
    arr.forEach(item => setVal(item))


查看完整回答
反对 回复 2018-09-02
  • 2 回答
  • 0 关注
  • 783 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信