我在javascript中有以下变量:
var stC = {
kosten: 5,
tijd: 4,
locatie: 3,
beoordeling: 2,
garantie: 1
};
如果例如stC.kosten
更改为3,我想更改具有相同值的变量,在此示例stC.locatie
中,要更改为stC.kosten
的旧值。
因此,如果stC.kosten
变为3,stC.locatie
变为5
或者,如果stC.beoordeling
变为5,则stC.kosten
变为2。
尝试搜索,但无法找到解决问题的方法。
有谁知道我该怎么做?
答案 0 :(得分:1)
这样的东西?
var stC = { kosten: 5, tijd: 4, locatie: 3, beoordeling: 2, garantie: 1 };
function changeValue(obj, key, value){
var current = obj[key],
match = getKeyByValue(obj, value);
if(!match) return;
// swap values
obj[key] = value;
obj[match] = current;
}
function getKeyByValue(obj, value){
return Object.keys(obj).filter(function(key) {
return obj[key] === value;
})[0];
}
changeValue(stC,
'kosten', // property to change
3); // new value
如果您想使用此IE9之前的版本,请将填充物用于Object.keys。
答案 1 :(得分:0)
stC.prototype =
{
setKosten : function(value)
{
this.kosten = value;
this.locatie = whatever;
}
};
答案 2 :(得分:0)
使用对象观察者。
Object.observe(stC, function(changes) {
changes.forEach(change) {
switch (change.name) {
case "kosten":
change.object.locatie = change.oldValue;
...
...
}
});
});
目前,您只能在Chrome中找到它。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe。
答案 3 :(得分:-2)
您可以使用getter和setter
var o = {
_kosten: 3,
get kosten() { return this._kosten; },
set kosten(x) { this._kosten = x; /* DO YOUR ADDITIONAL LOGIC HERE */ }
};
以下是MDN文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set