javascript - 如何更改对象的值。我在 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
解决方案
请不要调用 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>
推荐阅读
- html - 如何将border-bottom应用于最后一个不为空的?
- apache-spark - Spark上的Hive如何从jdbc读取数据?
- php - 多重身份验证 Laravel
- javascript - 更改状态中数组的特定索引而不是我的所有状态对象
- spring-integration - jms 的问题:入站通道适配器
- google-sheets - 无法在查询中传递十进制值?
- facebook - Facebook Messenger Platform 在一个请求中向 Webhook 发送多个事件的情况有哪些?
- ios - 物理 iPad Pro 设备返回的语音合成声音是否与其模拟器不同?
- python - 异步循环内的异步循环
- java - Java Wrapper 的比较