javascript - 如何在对象的对象中找到空值/未定义值

标签 javascript arrays json

在包含 Json、数组和任何其他数据类型的对象中查找 null/undefined 或空值的最佳方法是什么?

一种替代方法是使用字符串搜索,但我不确定这是否是一种好的做法:

myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];


function containsInvalidValue(object) {
    myString = JSON.stringify(object);
    console.log(myString);
    let containsNull = myString.search("null"),
    containsUndefined = myString.search("undefined"),
    containsEmpty = myString.search("\"\""),
    containsInvalidValue = containsNull + containsUndefined + containsEmpty;
    if(containsInvalidValue < 0)
        return false;
    else
        return true;
}

console.log(containsInvalidValue(myObject));

这种方法的第一个问题是 JSON.stringify() 不会将 undefined 字段包含到 json 对象中。因此,JSON.stringify(object) 行返回以下内容:

"[{"foo":10,"bar":"NY"},123,[null,11,"",22],null,{"baz":99}]"

它忽略了 json 中的 quz: undefined

最佳答案

这有点 hacky,但一个选择是使用 JSON.stringify 和一个函数来检查被字符串化的值是 null 还是 undefined:

const myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];


function containsInvalidValue(object) {
  let hasNullOrUndef = false;
  JSON.stringify(object, (key, val) => {
    if (val === null || val === undefined) {
      hasNullOrUndef = true;
    }
    return val;
  });
  return hasNullOrUndef;
}

console.log(containsInvalidValue(myObject));

或者手动递归迭代:

const myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];

const check = (val) => {
  if (val === null || val === undefined) {
    return true;
  }
  if (typeof val !== 'object') {
    return false;
  }
  for (const item of Object.values(val)) {
    if (check(item)) {
      return true;
    }
  }
  return false;
};
console.log(check(myObject));

关于javascript - 如何在对象的对象中找到空值/未定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862744/

相关文章:

java - 将curl转换为httpGet

json - 配置单元 : How to explode a JSON column with an array, 并嵌入到 CSV 文件中?

javascript - 如何在 Canvas 中画线

javascript - 如何过滤 native react 中的对象数组?

javascript - 让我的 jQuery 代码远离 html 文件

javascript - Node.js 只使用数组中的最后一项

javascript - 当有自定义组件时,Formik resetForm() 不会重置整个表单

c - 数组代码编译错误[c]

javascript - 如何让登录到控制台的整个数组出现在选定的 id 标签中?

javascript - 如何从 JSON 对象中获取值?