如何在JavaScript中避免大量的条件编程?

How to avoid a lot of conditional programming in JavaScript?

假设我们有这样的代码:

有很多标准数据检查(如果 属性 存在...for..if 有自己的...end 等)那么它是 "normal code" 吗?因为我的Java朋友看到了,他问我:你为什么写出低质量的代码?

还有其他问题:是否存在某种方法可以简化每种方法等中的数据检查?例如:"check if property in obj exists"。 (我不想使用打字稿)。我经常使用它,但我想知道普通 JS 是如何完成它的。 (我尝试使用 es7 装饰器,但它们只使用方法。不是纯函数等)

var resultList;
var obj = {

    elem1 : [
    {
        "type" : "zeta_0"
    },
    {
        "type" : "beta_0"
    },
    {
        "type" : "omega_0"
    }
  ],

    elem2 : [
    {
        "type" : "zeta_1"
    },
    {
        "type" : "beta_1"
    },
    {
        "type" : "omega_1"
    }
  ]

}

function fillResultSet(sourceData) {

    var res = [];

    if (sourceData && sourceData.elem1) {

    for (var key in sourceData) {

      if (sourceData.hasOwnProperty(key)) {
        res.push(sourceData[key][0].type);
      }

    }

  }

  return res;

}

resultList = fillResultSet(obj);

Demo

你可以看看map(为什么主对象中需要标识符,它不能是数组吗?):

result=Object.values(obj).map(el=>el[0].type);

由于 "doesnt exist" 在 js 中是假的,如果 sth 存在,最简单的模式是 OR (||) 运算符:

(document.getElementById("test")||document.body).innerHTML="test";

如果你想return一个使用函数式编程的所有类型的数组,使用这个:

function fillResultSet(sourceData) {
    var result = [];
    Object.getOwnPropertyNames(sourceData || {}).forEach(function(key){
        sourceData[key].forEach(function(e){
            result.push(e.type);
        });
    });
    return result;
}