javascript 对象中的数组错误处理

qkf9rpyu  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(90)

objName是一个包含属性的对象,其中一些属性是数组。我试图检查obj的属性和元素是否未定义、为null或具有空字符串。

function fieldChecker(obj) {
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];

      // Check if the value is an array
      if (Array.isArray(value)) {
        const hasInvalidElement = value.some(function(element) {
          return element === undefined || element === null || element === '';
        });

        if (hasInvalidElement || key === undefined || key === null || key === '') {
          console.log('-', key, ' or its elements are missing or empty. Key Value: ', key, ' Array Value:   ', value);
        }
      } else {
        // For non-array values, perform the regular check
        if (key === undefined || key === null || key === '' || value === undefined || value === null || value === '') {
          console.log('-', key, ' is missing or empty. Key Value: ', key, ' Value: ', value);
        }
      }
    }
  }
}
fieldChecker(objName);

我故意修改了一个数组,这样我就可以看到值是一个空的sting,但这段代码没有拾取它。我对JS相当陌生,所以我不确定我是否完全理解如何将元素作为错误处理的目标。

fhity93d

fhity93d1#

一个简单的递归就可以做到这一点:

function fieldChecker(obj, path = '') {
  
  if(obj === null || obj === undefined || obj === '') {
    console.log(path, 'is empty');
    return;
  }

  if(Array.isArray(obj)){
    for(let i = 0; i < obj.length; i++){
       fieldChecker(obj[i], `${path}[${i}]`);
    }
  } else if (obj.__proto__ === Object.prototype){
    for(const k in obj){
      fieldChecker(obj[k], `${path}${path ? '.' : ''}${k}`);
    }
  }
}
fieldChecker(objName);
<script>
const objName = {
  arr: [0, 1, 2, {foo:undefined}, undefined],
  test: null,
  foo: 'foo',
  baz: { list: [0, 1, null, {bad: undefined}], notList: false},
  obj:{
    bar: 'bar',
    another:''
  }
};
</script>

相关问题