[[此答案的第一部分基于 OP 问题的先前版本,该问题现已编辑为不同的问题。有关适用于问题当前编辑的解决方案,请参阅此答案的第二部分(当整个问题更改为其他内容时,它真的把事情搞砸了。]]
原始答案
您只需要测试密钥是否已经存在并检查那里是否已经存在数组。如果密钥不存在,请添加它。如果键存在并且它已经是一个数组,只需将另一个值推入数组即可。如果键存在,但不是数组,则获取该值,然后将键重置为包含前两个值的数组。
这是执行此操作的代码:
function addValue(obj, key, value) {
if (obj.hasOwnProperty(key)) {
// check if it's already an array using the recommended way of detecting an array
if (Object.prototype.toString.call(obj[key]) === "[object Array]")
obj[key].push(value);
} else {
var firstVal = obj[key];
obj[key] = [firstVal, value];
}
} else {
obj[key] = value;
}
}
最新答案
仅供参考,您的数据结构选择很难读取和写入,因为读取器和写入器都必须先检查值的类型,然后才能对其进行操作。如果项目总是像这样在其中包含一个或多个元素的数组会容易得多。
// one item for each key
A = {"room1":["1"], "room2":["2"], "room3":["3"]};
// add 101 to room 1
A = {"room1":["1","101"], "room2:["2"], "room3":["3"]};
// add 201 to room 2
A = {"room1":["1","101"], "room2":["2","201"], "room3":["3"]};
然后,您将需要任何特殊的代码来读取和写入,您只需检查密钥是否存在,如果存在,则将新值推入其中。如果没有,请添加数组。
在这种情况下,添加一个值就是这样
function addValue(obj, key, value) {
if (obj.hasOwnProperty(key)) {
obj[key].push(value);
} else {
obj[key] = [value];
}
}