json 递归函数没有发回完整的 Json 对象
json recursive function does not send back complete Json Object
我有以下 JsonObject
let jsonObject = {
"augmentedReality": {
"enabled": false,
"augmentedRealitySettings" : [
{
"assetId": 7
}
]
}
}
我已经编写了一个如下所示的递归函数
isAssetId(jsonObject: any) {
for (let key in jsonObject) {
if (typeof jsonObject[key] === "object") {
jsonObject[key] = this.isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}
我的目标是更改 assetId 在 jsonObject 中的任何位置。这个 JSON 只是一个例子,而 assetId 可能更深。
代码的问题在于,当它成功执行时 returns 以下 JSON 对象
我用以下内容调用该函数:
jsonObject= isAssetId(jsonObject);
console.log(jsonObject);
我得到以下结果。
{
augmentedReality: { enabled: false, augmentedRealitySettings: [
[Object] ] }
}
Object
应该显示它没有对象的数据。
我无法弄清楚似乎是什么问题。任何帮助将不胜感激?
更新:
我将代码写入以下站点
here
奇怪的是它在这里工作正常,但它不适用于我在 NestJs
上的打字稿?现在是什么原因?
问题出在函数中的“this”关键字。有关详细信息,请查看 post。
let jsonObject = {
"augmentedReality": {
"enabled": false,
"augmentedRealitySettings" : [
{
"assetId": 7
}
]
}
}
var json = isAssetId(jsonObject);
console.log(JSON.stringify(json));
isAssetId(jsonObject) {
for (let key in jsonObject) {
if (typeof jsonObject[key] === "object") {
jsonObject[key] = isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}
你的代码逻辑有问题。有一次你像对象一样遍历数组。你可以这样做:
var json = isAssetId(jsonObject);
console.log(JSON.stringify(json));
function isAssetId(jsonObject) {
for (let key in jsonObject) {
if(Array.isArray(jsonObject[key])){
for (const [i ,element] of jsonObject[key].entries()) {
jsonObject[key][i] = isAssetId(element);
}
}
else if (typeof jsonObject[key] === "object") {
jsonObject[key] = isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}
我有以下 JsonObject
let jsonObject = {
"augmentedReality": {
"enabled": false,
"augmentedRealitySettings" : [
{
"assetId": 7
}
]
}
}
我已经编写了一个如下所示的递归函数
isAssetId(jsonObject: any) {
for (let key in jsonObject) {
if (typeof jsonObject[key] === "object") {
jsonObject[key] = this.isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}
我的目标是更改 assetId 在 jsonObject 中的任何位置。这个 JSON 只是一个例子,而 assetId 可能更深。 代码的问题在于,当它成功执行时 returns 以下 JSON 对象 我用以下内容调用该函数:
jsonObject= isAssetId(jsonObject);
console.log(jsonObject);
我得到以下结果。
{
augmentedReality: { enabled: false, augmentedRealitySettings: [
[Object] ] }
}
Object
应该显示它没有对象的数据。
我无法弄清楚似乎是什么问题。任何帮助将不胜感激?
更新:
我将代码写入以下站点
here
奇怪的是它在这里工作正常,但它不适用于我在 NestJs
上的打字稿?现在是什么原因?
问题出在函数中的“this”关键字。有关详细信息,请查看 post。
let jsonObject = {
"augmentedReality": {
"enabled": false,
"augmentedRealitySettings" : [
{
"assetId": 7
}
]
}
}
var json = isAssetId(jsonObject);
console.log(JSON.stringify(json));
isAssetId(jsonObject) {
for (let key in jsonObject) {
if (typeof jsonObject[key] === "object") {
jsonObject[key] = isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}
你的代码逻辑有问题。有一次你像对象一样遍历数组。你可以这样做:
var json = isAssetId(jsonObject);
console.log(JSON.stringify(json));
function isAssetId(jsonObject) {
for (let key in jsonObject) {
if(Array.isArray(jsonObject[key])){
for (const [i ,element] of jsonObject[key].entries()) {
jsonObject[key][i] = isAssetId(element);
}
}
else if (typeof jsonObject[key] === "object") {
jsonObject[key] = isAssetId(jsonObject[key]);
} else {
if(key=='assetId'){
jsonObject[key]=3;
}} }
return jsonObject;
}