javascript - 构建新 JSON 的函数未定义
问题描述
我有三个 JSON 文件。我的目标是通过以某种方式组合来自它们的数据来创建一个新的。
充其量我认为我有正确的逻辑和语法来组合数据(如果有错请纠正我),但是:
- 我不知道函数中有什么,如果有的话
return
。 - 我不知道最终如何编写新文件,即使功能正确且完整。
第一个障碍是,至少当我记录函数调用的结果时,它返回undefined。有什么问题?
即使我通过了,我的代码中的最后两行是否完全正确地写入文件的方式?
我尝试了三种变体,唯一的区别是我是什么,而不是什么。
代码:
var fs = require('fs');
const safeJsonStringify = require('safe-json-stringify');
var asanaProjects = require("C:/Users/GabrielRivera/asana/Asana Projects.json");
var asanaTasks = require("C:/Users/GabrielRivera/asana/Asana Tasks.json");
var asanaAttachments = require("C:/Users/GabrielRivera/asana/Asana Attachments.json");
function buildNewJSON() {
return asanaProjects.map(project => {
project.attachments = []
asanaTasks.map(task => {
if(project.items.includes(task.__object_id)){
asanaAttachments.map(attachment => {
if(task.attachments.includes(attachment.__object_id)){
project.attachments.push(attachment)
return project
}
})
}
})
})
}
console.log(buildNewJSON())
var asanaData = safeJsonStringify(buildNewJSON());
fs.writeFile("asanaData.json", asanaData);
生成的JSON 文件: [null,null,null...]
代码:
function buildNewJSON() {
return asanaProjects.map(project => {
project.attachments = []
asanaTasks.map(task => {
if(project.items.includes(task.__object_id)){
asanaAttachments.map(attachment => {
if(task.attachments.includes(attachment.__object_id)){
project.attachments.push(attachment)
}
})
}
})
})
}
console.log(buildNewJSON())
var asanaData = safeJsonStringify(buildNewJSON());
fs.writeFile("asanaData.json", asanaData);
生成的JSON 文件: [null,null,null...]
代码:
function buildNewJSON() {
asanaProjects.map(project => {
project.attachments = []
asanaTasks.map(task => {
if(project.items.includes(task.__object_id)){
asanaAttachments.map(attachment => {
if(task.attachments.includes(attachment.__object_id)){
project.attachments.push(attachment)
return project
}
})
}
})
})
}
console.log(buildNewJSON())
var asanaData = safeJsonStringify(buildNewJSON());
fs.writeFile("asanaData.json", asanaData);
生成的 JSON 文件: 未定义
解决方案
更新你的buildNewJson
方法。
function buildNewJSON() {
return asanaProjects.reduce(function(output,project){
project.attachments = [];
asanaTasks = asanaTasks.reduce(function(tasks,task){
if(project.items.includes(task.__object_id)){
asanaAttachments = asanaAttachments.reduce(function(attachments,attachment){
if(task.attachments.includes(attachment.__object_id)){
project.attachments.push(attachment);
}
attachments.push(attachment);
return attachments;
},[]);
}
tasks.push(task);
return tasks;
},[]);
output.push(project);
return output;
},[]);
}
推荐阅读
- java - 用于 Spring Boot 应用程序的 Logback 自定义数据库附加程序
- xamarin - 如何修复 Xamarin.Forms 中的 ECONNRESET?
- java - 如何通过偏移读取更改的文本文件
- google-cloud-dataflow - 我应该使用哪些 Stackdriver 监控过滤器来选择数据流作业的 pcollection?
- hadoop - 将 CSV 数据加载到 Hive ORC 表中
- python - 必须输入字母 A 和 B 并通过翻转它们来生成所有 A 的代码不适用于所有选项
- sql - SQL选择插入触发器
- java - apache spark中集合的编码器
- java - 流式传输具有多个对象的 Json 文件
- r - 剪掉每个变量名的第一个字母