首页 > 解决方案 > 构建新 JSON 的函数未定义

问题描述

我有三个 JSON 文件。我的目标是通过以某种方式组合来自它们的数据来创建一个新的。

充其量我认为我有正确的逻辑和语法来组合数据(如果有错请纠正我),但是:

第一个障碍是,至少当我记录函数调用的结果时,它返回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 文件: 未定义

标签: javascriptnode.jsjsonreturnundefined

解决方案


更新你的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;
  },[]);
}

推荐阅读