首页 > 解决方案 > 如何更改对象的值。我在 Google Apps Scipts 环境中编码

问题描述

假设公寓有 4 个窗户

有以下数组

        var windowAction= [
            ["1. open", "1. close"],
            ["2. open", "2. close"],
            ["3. open", "3. close"],  
            ["4. open", "4. close"],
          ];
    
    

最初,所有窗口都是打开的。我以以下对象的形式写了这个

     var window= {
              "window":[
                [{"action": windowAction[0][0]}],
                [{"action": windowAction[1][0]}],
                [{"action": windowAction[2][0]}],
                [{"action": windowAction[3][0]}]
              ]
            };

关闭 1 号窗口后,需要将对象更改为

    var window= {
              "window":[
                [{"action": windowAction[0][1]}],
                [{"action": windowAction[1][0]}],
                [{"action": windowAction[2][0]}],
                [{"action": windowAction[3][0]}]
              ]
            };

如果我们关闭第三个窗口,将会有

 var window= {
          "window":[
            [{"action": windowAction[0][1]}],
            [{"action": windowAction[1][0]}],
            [{"action": windowAction[2][1]}],
            [{"action": windowAction[3][0]}]
          ]
        };

反之亦然,如果我们打开第一个窗口,它将是

     var window= {
              "window":[
                [{"action": windowAction[0][0]}],
                [{"action": windowAction[1][0]}],
                [{"action": windowAction[2][1]}],
                [{"action": windowAction[3][0]}]
              ]
            };

请告诉我如何使它可变..

我尝试使用 switch-case 进行编写,但在此过程中我意识到它不起作用。

我需要它完全以对象的形式

先感谢您

有我的尝试:

function checker(windowObj, userInput){    
    for (var i = 0; i < 4; i++){
        if (windowAction[i][0] == userInput){
            windowObj[i] = windowAction[i][1];          
        }
        else {
            windowObj[i] = windowAction[i][0];
        }
    }
}

var windowAction = [
    ["1. open", "1. close"],
    ["2. open", "2. close"],
    ["3. open", "3. close"],  
    ["4. open", "4. close"]
];
    
var windowObj = [
    windowAction[0][0],
    windowAction[1][0],
    windowAction[2][0],
    windowAction[3][0]
];



  
var userInput = "1. open";
    
checker(windowObj, userInput);  
print(windowObj);


userInput = "2. open";

checker(windowObj, userInput);  
print(windowObj);


userInput = "1. close";

checker(windowObj, userInput);  
print(windowObj);

输出应该是:

1. close,2. open,3. open,4. open
1. close,2. close,3. open,4. open
1. open,2. close,3. open,4. open

标签: javascript

解决方案


请不要调用 variables window,它的 JS 保留字等等。

如果我理解正确,您需要一种更改对象特定属性值的方法吗?

windowobj.window[0][0].action=windowAction[0][1]

您可以轻松地定位特定的目标,只需遵循您的索引即可。

var windowAction = [
  ["1. open", "1. close"],
  ["2. open", "2. close"],
  ["3. open", "3. close"],
  ["4. open", "4. close"],
];
var windowobj = {
  "window": [
    [{
      "action": windowAction[0][0]
    }],
    [{
      "action": windowAction[1][0]
    }],
    [{
      "action": windowAction[2][0]
    }],
    [{
      "action": windowAction[3][0]
    }]
  ]
};

console.log(windowobj.window[0][0].action)

windowobj.window[0][0].action=windowAction[0][1]

console.log(windowobj.window[0][0].action)
console.log(windowobj.window)

编辑:

如果您需要自动更改,那么您需要构造不同的数组/对象:

定义您windowAction的对象而不是数组,您将拥有返回打开或关闭状态的函数:

1:function() { x = ["1. open", "1. close"]; return x[1]},

return这就是你不会用它做的事情。return x[1]关闭,返回x[0]打开。

然后在windowobj对象端调用该函数来获取当前值。

"action": windowAction[1]()

这样,您可以windowAction通过更改0为关闭然后关闭,1反之亦然,并且windowobj始终更新。

var windowAction = {
  1:function() { x = ["1. open", "1. close"]; return x[1]},
  2:function() { x = ["2. open", "2. close"]; return x[0]},
  3:function() { x = ["3. open", "3. close"]; return x[0]},
  4:function() { x = ["4. open", "4. close"]; return x[0]}
};

console.log(windowAction[1]())



var windowobj = {
  "window": [
    [{
      "action": windowAction[1]()
    }],
    [{
      "action": windowAction[2]()
    }],
    [{
      "action": windowAction[3]()
    }],
    [{
      "action": windowAction[4]()
    }]
  ]
};

console.log(windowobj.window[0])

编辑2:

document.querySelector("select").onchange = function (event) {
  let res = event.target.value.split(". ")
  setValue(res[0], res[1])
};

var windowAction
let saveState=[[,],[,],[,],[,]];

function setValue(num, state){

saveState[num-1][0]=num
saveState[num-1][1]=state
//console.log(saveState)

   windowAction = {
    1:function() {if(saveState[0][1] === "close" && saveState[0][0] ==1){x="1. close"}else{x="1. open"}; return x},
    2:function() {if(saveState[1][1] === "close" && saveState[1][0] ==2){x="2. close"}else{x="2. open"}; return x},
    3:function() {if(saveState[2][1] === "close" && saveState[2][0] ==3){x="3. close"}else{x="3. open"}; return x},
    4:function() {if(saveState[3][1] === "close" && saveState[3][0] ==4){x="4. close"}else{x="4. open"}; return x},
  };

//console.log(saveState1)
//windowAction[num](state)



  var windowobj = {
    "window": [
      [{
        "action": windowAction[1]()
      }],
      [{
        "action": windowAction[2]()
      }],
      [{
        "action": windowAction[3]()
      }],
      [{
        "action": windowAction[4]()
      }]
    ]
  };

  console.clear()
  //console.log(windowobj.window[num-1])
  console.log(windowobj.window)

}
.as-console-wrapper{
min-height: 70%}
<select>
  <option disabled selected>...</option>

  <option>1. open</option>
  <option>1. close</option>
  <option>2. open</option>
  <option>2. close</option>
  <option>3. open</option>
  <option>3. close</option>
  <option>4. open</option>
  <option>4. close</option>
</select>


推荐阅读