关于javascript:清除对象中没值的数据-unfinednull

针对在对空值的定义上
前端:输入框中不输出值就是没值然而实际上输入框绑定了一个字段,不输出值为undefined或”。还有{}、[]、null。

let params = {
    a: 1, b: undefined, c: '', d: {}, e:[], f: null
}

后端:空值就不应该将该值放入参数中。冀望的对象是:

let params = {
    a: 1
}

针对这种状况构建函数解决

function clearEmptyPro(obj) {
  let curVal = {};
  let toString = Object.prototype.toString;
  for (let key in obj) {
      let value = obj[key];
      let type = toString.call(value);
      if (value || type === "[object Number]" || type === "[object Boolean]") {
          switch (type) {
              case "[object Object]":
                  if (Object.keys(value).length > 0) {
                      curVal[key] = value;
                  }
                  break;
              case "[object Array]":
                  if (value.length > 0) {
                      curVal[key] = value;
                  }
                  break;
              default:
                  curVal[key] = value;
                  break;
          }
      }
  }
  return curVal;
}

数据测试

var aa = {
    a: [], b: {}, c: 0, d: 1, f: null, g: undefined, h: true, i: false, 
    k: '',l: 'ss', m: [1], n: { a: 1 }
};
console.log(clearEmptyPro(aa));
// { c: 0, d: 1, h: true, i: false, l: 'ss', m: [1], n: { a: 1 }}

然而当数据中的对象或数组中页含有空值就没方法解决。

var aa = {
    a: [1, 0, false, undefined, null, '', { a: 1, c: 3 }],
    b: { a: true, b: false, c: '', d: undefined }
};
console.log(clearEmptyPro(aa));
// { a: [1, 0, false, undefined, null, '', { a: 1, c: 3 }], b: { a: true, b: false, c: '', d: undefined } }

这时就须要对每个对象和数组进行递归进行解决

function clearEmptyPro(data) {
    let curVal;
    let toString = Object.prototype.toString;
    let dataType = toString.call(data);
    if (dataType || dataType === "[object Number]" || dataType === "[object Boolean]") {
        switch (dataType) {
            case "[object Object]":
                if (Object.keys(data).length > 0) {
                    let momObj = {};
                    for (let key in data) {
                        let value = clearEmptyPro(data[key]);
                        let valueType = toString.call(value);
                        valueType === "[object Boolean]" || valueType === "[object Number]" || value ? momObj[key] = value : "";
                    }
                    curVal = momObj;
                } else {
                    return;
                }
                break;
            case "[object Array]":
                if (data.length > 0) {
                    let momValue = [];
                    data.forEach((e) => {
                        let value = clearEmptyPro(e);
                        let valueType = toString.call(value);
                        valueType === "[object Boolean]" || valueType === "[object Number]" || value ? momValue.push(value) : "";
                    });
                    momValue.length > 0 ? curVal = momValue : "";
                } else {
                    return;
                }
                break;
            case "[object Boolean]":
            default:
                curVal = data;
                break;
        }
    } else {
        return;
    }
    return curVal;
}

数据测试

var aa = {
    a: [1, 0, false, undefined, null, '', { a: 1, c: 3 }],
    b: { a: true, b: false, c: '', d: undefined }
}
console.log(clearEmptyPro(aa));
// { a: [1, 0, false, { a: 1, c: 3 }], b: { a: true, b: false } }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理