为什么只有最后一个元素显示数组而不是JavaScript中的所有元素

尼哈尔

我正在尝试从json数据中检索某些信息,并想创建一个新的键值对数组。但是它只返回最后一个元素而不是所有元素。

我的代码如下:

const input = 
{
  "file1": {
    "function1": {
      "calls": {
        "105": {
          "file": "file1",
          "function": "function2"
        },
        "106": {
          "file": "file1",
          "function": "function3"
        }
      },
      "points": {
        "106": "106"
      }
    },
    "function2": {
      "calls": {
        "109": {
          "file": "file1",
          "function": "function2"
        }
      },
      "points": {
        "109": "111"
      }
    },
    "function3": {
      "calls": {},
      "points": {
        "132": "135"
      }
    }
  }
}

function transformData(input) {
  let  res = [];
  Object.entries(input).map(([fileName, fileObject]) => {
    Object.entries(fileObject).map(([functionName, functionObject]) => {
      Object.entries(functionObject).map(([functionKey, functionValue]) => {
        if(functionKey === "calls") {
          Object.entries(functionValue).map(([callKey, callObject]) => {
            res = {"source": functionName, "target": callObject['function']}
            //console.log(res); // here all elements get printed out
          });
        }   
      });
    });
   });
  return res;
 }

 const result = transformData(input);
 console.log(result) // only giving {source:"function2", target:"function2"}

作为结果,我想要新的源,目标对,其中源是文件(功能1,功能2)下的键。目标是键“调用”(功能2,功能3,功能2)内嵌套键“功能”的值。在这里文件和功能的数量将会更多。但是某些功能可能根本没有“调用”数据。因此,结果将如下所示:

[
  {
    source: "function1",
    target: "function2"
  },
  {
    source: "function1",
    target: "function3"
  },
  {
    source: "function2",
    target: "function2"
  }
]

谁能帮我获得正确的输出。感谢您的时间。

麦威尔逊

我不确定您的对象结构有多“保证”,但是假设您要遍历所有file*键并获取函数映射,这应该可以解决问题。

const input = 
{
  "file1": {
    "function1": {
      "calls": {
        "105": {
          "file": "file1",
          "function": "function2"
        },
        "106": {
          "file": "file1",
          "function": "function3"
        }
      },
      "points": {
        "106": "106"
      }
    },
    "function2": {
      "calls": {
        "109": {
          "file": "file1",
          "function": "function2"
        }
      },
      "points": {
        "109": "111"
      }
    },
    "function3": {
      "calls": {},
      "points": {
        "132": "135"
      }
    }
  }
}

const result = [];

for(const key in input) {
  if (key.includes('file')) {
    const functions = Object.keys(input[key]);
    for (const func of functions) {
      const funcObject = input[key][func];
      for (const call in funcObject.calls) {
        const callObj = funcObject.calls[call];
        result.push({source: func, target: callObj.function});
      }
    }
  }
}
console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么数组中的最后一个元素会覆盖所有先前的元素?

为什么所有的数组都删除了这个集合中的一个元素而不是被引用的那个?

如何显示元素内元素的所有对象,直到 Angular 中的最后一个元素?

迭代仅输出 JSON 数组的最后一个元素而不是所有数组

为什么只有数组中的最后一个动画?

numpy数组形状中只有一个元素

为什么我的JavaScript数组应该只有两个元素,却显示两个元素?

选择不是最后一个兄弟的所有最后一个元素

为什么此代码仅显示数组中的最后一个元素?

为什么只有第一个元素被添加到div中

为什么人们在只有一个元素时使用 html 中的类

为什么最后一个向量被复制到python中列表的所有元素

只有数组的最后一个元素有效

为什么这个数组的最后一个元素被拼接而不是中间的一个?

为什么最后一个元素没有追加到我的数字数组中?

我在链表中添加了4个元素,但是为什么只显示了三个,而最后一个元素没有打印出来

每个循环中只有数组的最后一个元素被连接

为什么链表的最后一个元素没有出现在输出中?

JS:为什么数组的所有元素似乎共享同一个参考点?

为什么只有最后一个输入是存储?

只有最后一个可拖动的 <div> 元素/JS函数在释放时停止而不是前一个?

为什么我收到警告“遇到两个孩子使用相同的密钥,‘1’。” 即使数组中只有一个元素

交换数组的所有元素,除了第一个和最后一个

替换2D数组特定行中除最后一个元素以外的所有元素

对于具有一个或多个元素的数组,为什么JavaScript“数组中的长度”会给出不同的结果?

如何仅返回数组的最后一个元素而不获取所有元素

函数.push继续替换与数组中最后一个元素相同的所有元素

除了最后一个元素外,所有数组元素都未定义?

谁能告诉我为什么 JavaScript 中的 {For} 循环返回所有值,包括数组的第一个元素?