javascript - 如何将数据从一个对象插入到另一个具有不同结构的对象以生成第三个对象

标签 javascript json javascript-objects

我试图从一个对象中提取数据并将该数据插入到另一个对象中,但是这两个对象具有不同的结构。而且它的对象非常大,超过 3000 行。

我需要检查 object1 中是否存在 dictionary[0].key.mcp[0] 以及 object2 中是否存在 conv[0].mcp 我需要将 4 种语言插入到 object1 dictionary[0].dicts 中:德语、瑞典语、中文和日语,如果不存在,则不执行任何操作

我认为也许使用 for 循环我将能够完成任务,但问题是在某些情况下,在键下方,值 mcp 会更改为另一个值。

对象 1

dictionary = [
  {
    "key": {
      "mcp": [
        "mcp.empty"
      ]
    },
    "dicts": {
      "english": "",
      "german": ""
    },
    "context": null,
    "tags": [],
    "edited": "2016-10-27T15:41:31.000Z"
  },
  {
    "key": {
      "mcp": [
        "ui.controls.plasmacontrol.feeder"
      ]
    },
    "dicts": {
      "english": "Feeder",
      "german": "Förderer"
    },
    "context": null,
    "tags": [],
    "edited": "2016-10-27T15:41:31.000Z"
  },

对象 2

var conv = [
    {
        "mcp": "mcp.empty",
        "english": "",
        "german": "",
        "Swedish": "",
        "chinese": "",
        "japanese": ""
    },
    {
        "mcp": "ui.controls.plasmacontrol.feeder",
        "english": "Feeder",
        "german": " Förderer ",
        "Swedish": "Transportör",
        "chinese": "送粉器",
        "japanese": "粉末供給装置"
    },
    {
        "mcp": "ui.controls.plasmacontrol.feeder1",
        "english": "Feeder 1",
        "german": "Förderer 1 ",
        "Swedish": "Transportör 1",
        "chinese": "1号送粉器",
        "japanese": "粉末供給装置1"
    },

预期结果是一个对象,其中包含从 object1 到 object2 插入的所有数据。

对象3(预期结果)

 dictionary = [
      {
        "key": {
          "mcp": [
            "mcp.empty"
          ]
        },
        "dicts": {
         "english": "",
            "german": "",
            "Swedish": "",
            "chinese": "",
            "japanese": ""
        },
        "context": null,
        "tags": [],
        "edited": "2016-10-27T15:41:31.000Z"
      },
      {
        "key": {
          "mcp": [
            "ui.controls.plasmacontrol.feeder"
          ]
        },
        "dicts": {
          "english": "Feeder 1",
            "german": "Förderer 1 ",
            "Swedish": "Transportör 1",
            "chinese": "1号送粉器",
            "japanese": "粉末供給装置1"
        },
        "context": null,
        "tags": [],
        "edited": "2016-10-27T15:41:31.000Z"
      },

到目前为止,我已经得到了这个并且返回了一些错误

import dictionary from "./dictionary.mjs";
import conv from "./converted.mjs";
import _ from "lodash";
import fs from "fs";
import util from 'util';


const newObject = _.map(dictionary, dictionaryItem => {
   const key = _.get(dictionaryItem, "key.mcp[0]", "")
   const isPresent = _.find(conv, { "mcp": key })
   if(isPresent) {
     /*  console.log('se hizo') */
      return { ...dictionaryItem, dicts: { 
             "english": isPresent.english,
            "german": isPresent.german,
            "Swedish": isPresent.Swedish,
            "chinese": isPresent.chinese,
            "japanese": isPresent.japanese
         } 
      }
  } else {
/*    console.log('no') */
         return dictionary
  }
})  

try {
   const data = fs.writeFileSync('./final.js', util.inspect(newObject, {showHidden: false, depth: null}));
   //file written successfully
 } catch (err) {
   console.error(err)
 }

最佳答案

使用lodash 首先导入到你要执行操作的地方

import _ from "lodash"
  or
const _ = require("lodash")

const newObject = _.map(dictionary, dictionaryItem => {
   const key = _.get(dictionaryItem, "key.mcp[0]", "")
   const isPresent = _.find(conv, { "mcp": key })
   if(isPresent) {
      return { ...dictionaryItem, dicts: { 
             "english": isPresent.english,
            "german": isPresent.german,
            "Swedish": isPresent.Swedish,
            "chinese": isPresent.chinese,
            "japanese": isPresent.japanese
         } 
      }
  } else {
         return dictionary
  }
})  

天啊,你得到了你想要的结果

关于javascript - 如何将数据从一个对象插入到另一个具有不同结构的对象以生成第三个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569165/

相关文章:

java - 如何从 struts json 的序列化过程中排除基类

java - 带有 Ruby Web 应用程序连接的 Android JSON post 请求

javascript - 如何合并两个json数组的键值对? - JavaScript

javascript - 如何用 2 "steps": `objectVariable[step1][step2] = result;` 初始化对象变量

javascript - 在 iframe 中运行的 javascript 会影响主页吗?

Javascript:自动化功能

javascript - 仅显示具 Angular html 中的真实条件的 html 元素

php - 创建没有多个 SQL 查询的 JSON 对象 (PHP)

javascript - 寻找用 ReactJS 替换 Object.entries()

javascript - 将修改器封装在 JS 模块内的类中是一种好习惯吗?