【问题标题】:Check for objects with certain key/value pair in switch statement Javascript在switch语句Javascript中检查具有特定键/值对的对象
【发布时间】:2017-01-05 07:36:48
【问题描述】:

我有一个包含数字和对象的数组,例如:

var array = [0,0,1,0,2, {type:player, health:100, xp: 0}, 0,2,1,0, {type:weapon, damage:20}]

然后我遍历数组并在变量中设置一个字符串,用于动态设置类。

现在我有以下带有 switch 语句的循环:

for(var i = 0; i < array.length; i++){

        var setClass = "";

        switch (array[i]) {

          case 1:
            setClass = "walkable";
            break;
          case 2:
            setClass = "wall";
            break;
          default:
            setClass = "outside"

        }
}

我想要做的是在 switch 语句中检查循环中的项目是否是 1) 一个对象和 2) 具有某个键/值对?所以我想将字符串设置为 type:player 的字符串和 type:weapon 的其他字符串。我怎样才能做到这一点?

【问题讨论】:

  • 首先,使用foreach循环。顺便说一句,这是响应式扩展中 mapReduce 算法的一个很好的例子
  • 一个小问题,你想打开数组的值吗?或者你想打开数组的索引? '因为现在你正在切换索引
  • @AkhilArjun 抱歉,应该在值上

标签: javascript arrays switch-statement


【解决方案1】:

我希望这是你所期待的。

var array = [0,0,1,0,2, {type:player, health:100, xp: 0}, 0,2,1,0, {type:weapon, damage:20}]

for(var i = 0; i < array.length; i++){

        var setClass = "";

        switch (array[i]) {

          case 1:
            setClass = "walkable";
            break;
          case 2:
            setClass = "wall";
            break;
          default:
            if (Object.prototype.toString.call(array[i]) === '[object Object]'){
                //This means the value is an Object
                //And here you can check its type like
                if (array[i].type === 'player') {
                    //Do something
                }
            }
            setClass = "outside"

        }
}

【讨论】:

    【解决方案2】:

    希望这是你想要完成的:

     for(var i = 0; i < array.length; i++){
    
        var setClass = "";
        if(array[i] !== null && typeof(array[i]) === "object"){
    
          switch (array[i]) {
    
          case "player":
            setClass = "walkable";
            break;
          case "weapon":
            setClass = "wall";
            break;
          default:
            setClass = "outside"
    
         }
        }
    }
    

    【讨论】:

    • typeof 是一个运算符,所以需要(),并且它还为null 值返回object。所以这可能会以一个错误结束
    • @AkhilArjun:抱歉打错了。已更正。
    【解决方案3】:

    你可以在循环中使用

    array.forEach(function(element) {
        if (element.hasOwnProperty('type')) {
              switch (element.type) {
                  case "player":
                    ...
                    break;
                  case "weapon":
                    ...
                    break;
                  default:
                    ...
                }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多