用0内部对象替换undefined的最佳方法是什么?

时间:2019-05-20 17:35:42

标签: javascript object

这是示例对象:

实际上不称为value1value2等的对象内部的值

它们都有不同的名称

data是从api获得的数据。

let object = {
  id: '1',
  gen: {
    value1: data.value1, 
    value2: data.value2,
    value3: data.value3,
    value4: data.value4, // etc 
  },
  somethingelse: {
    one: {
      value1: data.value1,
      value2: data.value2,
      value3: data.value3,
      value4: data.value4, // etc 
    },
    two: {
      value1: data.value1,
      value2: data.value2,
      value3: data.value3,
      value4: data.value4, // etc 
    },
    three: {
      value1: data.value1,
      value2: data.value2,
      value3: data.value3,
      value4: data.value4, // etc 
    }
  }
};

我知道我可以将|| 0添加到每个NaN中,但这将是很多难看的代码 有时还有数学运算会返回if (!object.value1) object.value1 = 0 而且我不能只是做: {{1}},因为我需要100行重复的代码

3 个答案:

答案 0 :(得分:0)

您可以将相同的逻辑应用于具有更多循环的更深层对象:

for(let key in myObject) {
   if(myObject[key] === undefined || myObject[key] === null)
       myObject[key] = 0;
}

如果您的对象中有更多对象,请进行迭代,然后再按键等。

答案 1 :(得分:0)

如果可以使用ES6,则可以将数据包装在proxy中,该数据将返回0而不是未定义。然后使用它制作对象:

let real_data = {value1: 10, value2: 2}

// proxy for real data
let data = new Proxy(real_data, {
  get(target, name, receiver) {
      let val = Reflect.get(target, name, receiver);
      return val === undefined ? 0 : val
    }
});

// just use data now

let object = {id: '1',gen: {value1: data.value1, value2: data.value2,value3: data.value3,value4: data.value4, },somethingelse: {one: {value1: data.value1,value2: data.value2,value3: data.value3,value4: data.value4, },two: {value1: data.value1,value2: data.value2,value3: data.value3,value4: data.value4, },three: {value1: data.value1,value2: data.value2,value3: data.value3,value4: data.value4, }}};

console.log(object)

答案 2 :(得分:-1)

您可以使用递归,使用递归将undefined替换为0

const data ={}
let object = { id: '1', gen: { value1: data.value1, value2: data.value2, value3: data.value3, value4: data.value4,}, somethingelse: { one: { value1: data.value1, value2: data.value2, value3: data.value3, value4: data.value4, }, two: { value1: data.value1, value2: data.value2, value3: data.value3, value4: data.value4, }, three: { value1: data.value1, value2: data.value2, value3: data.value3, value4: data.value4, } } };
function removeUnf(obj){
  for(let key in obj){
    if(obj[key] && typeof obj[key] === "object"){
      removeUnf(obj[key])
    }
    else obj[key] = obj[key] === undefined ? 0 : obj[key]
  }
}

removeUnf(object);
console.log(object)

相关问题