Всем привет!
Имею JSON массив типа этого:
data = { "1": { "qq": "ww", "ee": "rr" }, "2": { "qq2": "ww3", "ee4": "rr5" } }
И надо поменять одно из значений одного под-массива.
Пробую:
jsondata["1"]["ww"] = "new value!";
jsondata["1"].ww = "new value!";
setData("1.ww", "new value!");
Любой из этих 3 способ ставит значение "new value!" не только у элемента "ww" из под-массива "1", но и у всех остальных элементов "ww"!
Что я делаю не так?
Функция setData:
function setData(key, val, obj)
{
if (!obj) obj = data; //outside (non-recursive) call, use "data" as our base object
var ka = key.split(/\./); //split the key by the dots
if (ka.length < 2)
{
obj[ka[0]] = val; //only one part (no dots) in key, just set value
}
else
{
if (!obj[ka[0]]) obj[ka[0]] = {}; //create our "new" base obj if it doesn't exist
obj = obj[ka.shift()]; //remove the new "base" obj from string array, and hold actual object for recursive call
setData(ka.join("."),val,obj); //join the remaining parts back up with dots, and recursively set data on our new "base" obj
}
}