【发布时间】:2018-12-03 23:21:15
【问题描述】:
说明:已将 JSON 对象定义为全局变量。
var JSON_OBJECT = [];
[
{
"user_id": "123",
"AF": [
{
"formula_type": 0,
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
},
{
"user_id": "859",
"AF": [
{
"formula_type": 0,
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
}
]
JSON 对象 (JSON_OBJECT) 由函数构造:jsonCreator
function jsonCreator() {
var af_Array = [];
var Trend_Array = [];
var selectedUsers = ['123','859','235']
for (var i = 0; i < 1; i++) {
var af_keys = {}
af_keys.formula_type = i;
af_keys.lag = i;
af_Array.push(af_keys);
}
for (var j = 0; j < 1; j++) {
var trends_keys = {}
trends_keys.is_active = j;
Trend_Array.push(trends_keys);
}
for (var indexUsers = 0; indexUsers < selectedUsers.length; indexUsers++) {
var jsonObj = {};
jsonObj.user_id = selectedUsers[indexUsers]['rowId'];
jsonObj.AF = af_Array;
jsonObj.Trend = Trend_Array;
JSON_OBJECT.push(jsonObj);
}
};
问题说明:将formula_type的值更改为user_id:123
尝试以下代码
var currentUserID = '123';
var formulaType = 'FORMULA-1'
Object.keys(JSON_OBJECT).forEach(function(k) {
if (currentUserID == JSON_OBJECT[k]['user_id']) {
JSON_OBJECT[k]['AF'][0]['formula_type'] = formulaType;
}
});
面临的问题:
上面的代码将formula_type 的值更改为user_id:123 和user_id:859
生成的 JSON:
[
{
"user_id": "123",
"AF": [
{
"formula_type": 'FORMULA-1',
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
},
{
"user_id": "859",
"AF": [
{
"formula_type": 'FORMULA-1',
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
}
]
我们将不胜感激。
var JSON_OBJECT = [
{
"user_id": "123",
"AF": [
{
"formula_type": 0,
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
},
{
"user_id": "859",
"AF": [
{
"formula_type": 0,
"lag": 0
}
],
"Trend": [
{
"is_active": 0
}
]
}
];
var currentUserID = '123';
var formulaType = 'FORMULA-1'
Object.keys(JSON_OBJECT).forEach(function(k) {
if (currentUserID == JSON_OBJECT[k]['user_id']) {
JSON_OBJECT[k]['AF'][0]['formula_type'] = formulaType;
}
});
console.log(JSON_OBJECT);
【问题讨论】:
-
你能试试 data[0].AF[0].formula_type = "3";..哪里数据是 JSON
-
你的代码工作见sn-p。现在有什么问题?
-
这可能是
JSON_OBJECT创建方式的问题。这两个AF值可能引用同一个数组,或者AF数组中的元素引用同一个对象。当然,正确的 json 对象不应该发生这种情况,但是如果您自己创建这些对象,那么错误可能就在那里。 -
是的,问题出在创作上。这一行:
jsonObj.AF = af_Array;不复制,它只是分配一个引用。所有AF字段都引用相同的af_Array对象。你需要做一个深拷贝。Trend_Array分配也是如此。 -
如果您不确定如何进行深度复制,最简单的方法是与 json 字符串相互转换。即创建
af_Array时将其保存为字符串af_Array_str = JSON.stringify(af_Array),然后在创建对象时使用jsonObj.AF = JSON.parse(af_Array_str)
标签: javascript jquery json key-value