Javascript 如何将数据从一个对象插入到另一个具有不同结构的对象以生成第三个对象
我试图从一个对象中提取数据并将数据插入另一个对象,但这两个对象的结构不同。它的物体非常大,超过3000行 我需要在object1中检查字典[0].key.mcp[0]是否存在,以及它是否存在于object2 conv[0].mcp中。我需要在object1字典[0]中插入4种语言:德语、瑞典语、汉语和日语。dicts,如果它不存在,则不执行任何操作 我想也许有了for循环,我就能够完成任务了,但问题是在某些情况下,在键以下,mcp值会为另一个改变 对象1Javascript 如何将数据从一个对象插入到另一个具有不同结构的对象以生成第三个对象,javascript,json,javascript-objects,Javascript,Json,Javascript Objects,我试图从一个对象中提取数据并将数据插入另一个对象,但这两个对象的结构不同。它的物体非常大,超过3000行 我需要在object1中检查字典[0].key.mcp[0]是否存在,以及它是否存在于object2 conv[0].mcp中。我需要在object1字典[0]中插入4种语言:德语、瑞典语、汉语和日语。dicts,如果它不存在,则不执行任何操作 我想也许有了for循环,我就能够完成任务了,但问题是在某些情况下,在键以下,mcp值会为另一个改变 对象1 dictionary = [ {
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)
}
使用
首先导入要执行操作的位置
import _ from "lodash"
or
const _ = require("lodash")
及
天哪,你得到了你想要的结果你能展示一下你做了什么吗?中文、日文和瑞典语文本来自哪里?你能创建一个样本对象来展示你的确切预期结果吗?另外,是否要按索引比较每个数组?因为在您的示例中,第一个对象有3项,下一个对象有2项。HI,@JackBashford,来自我之前转换为json的excel文件。HI@AbanaClara我现在发布了预期结果,谢谢。HI谢谢@Ashok很接近,但我有个问题,newObject重复了许多DictionaryItem,并以另一个顺序写入这些项,但并不是全部写入,然后,当我将新对象写入另一个文件时,cerain点会显示…2730个项目,然后再次启动该文件。@ErnestoPérez如果您不使用异步函数,则顺序问题不会出现,您可以使用z。映射超过10000个项目,仅缺点增加项目也会增加执行时间。我发布了我现在拥有的内容35.000行整个文件它在10000条记录上为我工作,并将对象毫无错误地保存到final.js文件中
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
}
})