在js中构造json问题

问题描述

在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 ;
            }

你期待的结果是什么?实际看到的错误信息又是什么?

大神们有什么好的简约的办法么?

阅读 3k
3 个回答
/**
 * 
 * @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)

你这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))

es6 的函数默认值 + 结构可以解决这个问题
简单的例子

function test({a = 'default'}){
  console.log(a)
}
test({b: 'b'})
// default
test({a: 'a'})
// a

但是如果需要判断很多内容的话,函数参数会比较难写

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题