假设公寓有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]}]
]
};
请告诉我怎样才能改变它。
我试着用一个开关箱来写,但是在写的过程中我意识到这是行不通的。
我需要它以对象的形式出现
提前谢谢你
这是我的尝试:
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
请不要调用变量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]()
这样你就可以通过将0
更改为1
来打开关闭windowAction
,反之亦然,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])
EDIT2:
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>