在属性类型不同的Javascript对象中找到错误的值?

时间:2018-10-11 10:53:10

标签: javascript

我有一个具有这种结构的对象。

const object = {
  property1: null,
  property2: {
    array1: [],
    array2: []
  },
  property3: {
    prop1: null,
    prop2: null
  }
}

我需要检查对象中的每个属性或每个属性中的每个值,如果它是虚假的-null或空数组,则对其进行处理。否则就离开它。

考虑到某些属性具有嵌套属性等,我不确定该怎么做。

所有帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您可以使用for...in循环来实现:

const object1 = {
  property1: null,
  property2: false,
  prop3: "hello",
  prop4: 1234
}

for (let attr in object1) {
  if (!object1[attr]) {
    console.log(attr, "this is false");
  } else {
    console.log(attr, "has a value");
  }
}

答案 1 :(得分:0)

您可以采用迭代和递归的方法。

首先获取对象的条目,然后迭代键/值对。然后检查该值是否为null或为空数组。如果是这样,请执行类似console.log的操作并返回回调。

如果不检查对象,然后使用实际值再次调用该函数。

function iter(object) {
    Object
      .entries(object)
      .forEach(([k, v]) => {
          if (v === null || Array.isArray(v) && !v.length) {
              console.log(k, 'is null or empty');
              return;
          }
          if (v && typeof v === 'object') {
              iter(v);
          }
      });
}

const object = { property1: null, property2: { array1: [], array2: [] }, property3: { prop1: null, prop2: null } };

iter(object);

答案 2 :(得分:0)

这将是一个完美的递归示例,因为它将动态地深入每个嵌套对象的对象结构。

const object = {
  property1: null,
  property2: {
    array1: [],
    array2: []
  },
  property3: {
    prop1: null,
    prop2: null
  }
}

const findFalsey = obj => {
    for(let key in obj) {
        if(typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
            findFalsey(obj[key])
        }
        if(!obj[key] || (Array.isArray(obj[key]) && obj[key].length === 0 )) {
            console.log('found falsey value')
        }
    }
}

findFalsey(object)