更改 JSON 对象键的值,也会更改其他值
Changing the value of JSON object's key, changes other values also
说明: 定义了一个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);
下面的代码片段有效:
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);
祝你好运!
尝试以下操作:
if (JSON_OBJECT.length > 0) {
JSON_OBJECT.forEach(function(obj, index) {
if (obj.user_id == 123) {
if (obj.hasOwnProperty('AF')) {
obj.AF.forEach(function(obj, index) {
if (obj.hasOwnProperty('formula_type')) {
obj.formula_type = 'FORMULA-1';
}
});
}
}
});
}
说明:这里JSON_OBJECT
是一个对象数组。所以我们需要先循环入数组。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
var currentUserID = '123';
var formulaType = 'FORMULA-1';
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 obj = jQuery.parseJSON(JSON_OBJECT);
// var obj1 = jQuery.parseJSON(JSON_OBJECT);
$.each(obj, function(k,value) {
if(value.user_id == currentUserID){
JSON_OBJECT.AF = formulaType;
obj[k]['AF'][0]['formula_type'] = formulaType;
}
})
var myJSON = JSON.stringify(obj);
console.log(myJSON)
});
</script>
使用数组 map() 方法:
var jsonObj = [
{
"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';
jsonObj.map(obj => {
if (obj.user_id == currentUserID) {
for (var i in obj["AF"]) {
obj["AF"][i].formula_type = formulaType;
}
}
});
console.log(jsonObj);
在循环中使用 JavaScript for ... :
var jsonObj = [
{
"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';
for (var i in jsonObj) {
if (jsonObj[i]["user_id"] == currentUserID) {
for (var j in jsonObj[i]["AF"]) {
jsonObj[i]["AF"][j].formula_type = formulaType;
}
}
}
console.log(jsonObj);
The problem was with the creation of JSON, jsonCreator()
. Line jsonObj.AF = af_Array;
was not copying, it was just assigning a reference.
找到解决方案,根据 @ccarton
的建议,将 JSON_OBJECT 转换为字符串并解析回来。
var currentUserID = '123';
var formulaType = 'FORMULA-1'
var JSON_OBJECT1 = JSON.stringify(JSON_OBJECT);
JSON_OBJECT = JSON.parse(JSON_OBJECT1)
Object.keys(JSON_OBJECT).forEach(function(k) {
if (currentUserID == JSON_OBJECT[k]['user_id']) {
JSON_OBJECT[k]['AF'][0]['formula_type'] = formulaType;
}
});
说明: 定义了一个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);
下面的代码片段有效:
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);
祝你好运!
尝试以下操作:
if (JSON_OBJECT.length > 0) {
JSON_OBJECT.forEach(function(obj, index) {
if (obj.user_id == 123) {
if (obj.hasOwnProperty('AF')) {
obj.AF.forEach(function(obj, index) {
if (obj.hasOwnProperty('formula_type')) {
obj.formula_type = 'FORMULA-1';
}
});
}
}
});
}
说明:这里JSON_OBJECT
是一个对象数组。所以我们需要先循环入数组。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
var currentUserID = '123';
var formulaType = 'FORMULA-1';
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 obj = jQuery.parseJSON(JSON_OBJECT);
// var obj1 = jQuery.parseJSON(JSON_OBJECT);
$.each(obj, function(k,value) {
if(value.user_id == currentUserID){
JSON_OBJECT.AF = formulaType;
obj[k]['AF'][0]['formula_type'] = formulaType;
}
})
var myJSON = JSON.stringify(obj);
console.log(myJSON)
});
</script>
使用数组 map() 方法:
var jsonObj = [
{
"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';
jsonObj.map(obj => {
if (obj.user_id == currentUserID) {
for (var i in obj["AF"]) {
obj["AF"][i].formula_type = formulaType;
}
}
});
console.log(jsonObj);
在循环中使用 JavaScript for ... :
var jsonObj = [
{
"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';
for (var i in jsonObj) {
if (jsonObj[i]["user_id"] == currentUserID) {
for (var j in jsonObj[i]["AF"]) {
jsonObj[i]["AF"][j].formula_type = formulaType;
}
}
}
console.log(jsonObj);
The problem was with the creation of JSON,
jsonCreator()
. LinejsonObj.AF = af_Array;
was not copying, it was just assigning a reference.
找到解决方案,根据 @ccarton
的建议,将 JSON_OBJECT 转换为字符串并解析回来。
var currentUserID = '123';
var formulaType = 'FORMULA-1'
var JSON_OBJECT1 = JSON.stringify(JSON_OBJECT);
JSON_OBJECT = JSON.parse(JSON_OBJECT1)
Object.keys(JSON_OBJECT).forEach(function(k) {
if (currentUserID == JSON_OBJECT[k]['user_id']) {
JSON_OBJECT[k]['AF'][0]['formula_type'] = formulaType;
}
});