Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lodash将JSON转换为对象数组_Javascript_Arrays_Node.js_Json_Lodash - Fatal编程技术网

Javascript 使用lodash将JSON转换为对象数组

Javascript 使用lodash将JSON转换为对象数组,javascript,arrays,node.js,json,lodash,Javascript,Arrays,Node.js,Json,Lodash,我在NoSql数据库中有一个JSON对象,其格式如下。我们是在从其他数据库迁移了一些记录之后获得这些数据的,这些是多值字段(基本上我们是在尝试清理数据以便进一步处理) 我想在同一个JSON中添加另一个键“bpTableDataName”,它应该具有这种格式和值 "bpTableDataName": [ { "name": "aName", "email": "aEmail", "pwdid": "aPWID" }, { "n

我在NoSql数据库中有一个JSON对象,其格式如下。我们是在从其他数据库迁移了一些记录之后获得这些数据的,这些是多值字段(基本上我们是在尝试清理数据以便进一步处理)

我想在同一个JSON中添加另一个键“bpTableDataName”,它应该具有这种格式和值

"bpTableDataName": [
    {
      "name": "aName",
      "email": "aEmail",
      "pwdid": "aPWID"
    },
    {
      "name": "bName",
      "email": "bEmail",
      "pwdid": "bPWID"
    },
    {
      "name": "cName",
      "email": "cEmail",
      "pwdid": "cPWID"
    }
  ],
有没有一种方法可以使用lodash实现这一点?

您可以使用
split()
将值拆分为一个数组。 然后迭代数组并创建requireJSON,然后将其推送到结果中

看看这个

var数据={
“BPContName”:“aName;bName;cName”,
“BPContEmail”:“aEmail;bEmail;cEmail”,
“BPContPWID”:“aPWID;bPWID;cPWID”
}
var name=data.BPContName.split(“;”);
var emails=data.BPContEmail.split(“;”);
var pwids=data.BPContPWID.split(“;”);
var结果=[];
对于(var i=0;i
尝试以下代码-

o={
“BPContName”:“aName;bName;cName”,
“BPContEmail”:“aEmail;bEmail;cEmail”,
“BPContPWID”:“aPWID;bPWID;cPWID”
}
map={“BPContName”:“name”,“BPContEmail”:“email”,“BPContPWID”:“pwdid”}
const result={u.reduce(o,(arr,v,k)=>(v.split(“;”).forEach((x,i)=>{u.set(arr,`i}.${map[k]},x)),arr),[]))
console.log(结果)
您可以通过以下方式查看返回的条目:

让obj={
“BPContName”:“aName;bName;cName”,
“BPContEmail”:“aEmail;bEmail;cEmail”,
“BPContPWID”:“aPWID;bPWID;cPWID”
}
让bpTableDataName=Object.entries(obj).reduce((r[key,value])=>{
设splits=value.split(“;”);
key=key.replace(“BPCont”,即“”).toLowerCase();
forEach((split,i)=>(r[i]=r[i]| |{})[key]=split)
返回r;
}, [])
obj.bpTableDataName=bpTableDataName;

console.log(obj)
使用
对象。分配
对象。条目
数组#映射
和扩展运算符使这变得微不足道

const inputdata={
“BPContName”:“aName;bName;cName”,
“BPContEmail”:“aEmail;bEmail;cEmail”,
“BPContPWID”:“aPWID;bPWID;cPWID”
};
常量t1=Object.assign({},…Object.entries(inputdata).map([k,v])=>({[k]:v.split(';'))}));
inputdata.bpTableDataName=t1.BPContName.map((名称,i)=>({name,email:t1.BPContEmail[i],pwdid:t1.BPContPWID[i]}));

console.log(输入数据)您可以使用lodash的
\uu.flow()
创建函数。使用
..map()
..overArgs()
创建一个函数,该函数拆分值,格式化键,然后使用
..unzip()
将它们转换为成对数组,例如
[['name',x'],['name',y']
。使用
\uuz.unzip()
转换数组数组以组合不同属性对。然后使用
..map()
进行迭代,并使用
..fromPairs()
将每个成对数组转换为一个对象

const{flow,partitright:pr,map,unzip,overArgs,times,size,constant,split,fromPairs}=_
const keysMap=新映射(['BPContName','name',['BPContEmail','email'],['BPContPWID','pwdid'])
const formatKey=key=>keysMap.get(key)
常数splitVals=pr(拆分,;)
常数fn=流量(
pr(地图,超RGS)(
(vals,k)=>解压([vals,times(size(vals),constant(k))),
[splitVals,formatKey])
),
解压,//转置
pr(map,fromPairs)//将每个pairs数组转换为对象
)
常数数据={
“BPContName”:“aName;bName;cName”,
“BPContEmail”:“aEmail;bEmail;cEmail”,
“BPContPWID”:“aPWID;bPWID;cPWID”
}
常数结果=fn(数据)
console.log(结果)

基本上你需要的是
压缩它

片段:

let obj={“BPContName”:“aName;bName;cName”,“BPContEmail”:“aEmail;bEmail;cEmail”,“BPContPWID”:“aPWID;bPWID;cPWID”},
res=uu.zipWith(
.map(obj,v=>v.split(“;”),
(名称,电子邮件,pwid)=>({name,email,pwid})
);
console.log(res)

您可以在本机javascript中执行此操作,欢迎使用堆栈溢出!请拿着(你得到了一枚徽章!)通读一下,尤其是你最好的选择是做你的研究,做相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。注意:它以JSON开头这一事实与此无关。当你解析它的时候,它只是一个对象,而不是一个“JSON对象”。@JaromandaX实际上我对JavaScript是新手。您能告诉我怎么做吗?您在原始对象中有
PWID
,但在输出中有一个额外的
d
。这是拼写错误吗?@KirtiJha我已经更新了我的答案以适合您的用例。
ReferenceError:u.未定义。
。。。失败您必须首先导入lodash:const=require('lodash')
引用错误:未定义require
。。。仍然失败-不要制作一个不运行的可运行代码段-它看起来不太好哦,这一点都不好,您的密钥是基于数据的!!我认为,
aName;b名字
等都是亚当、布赖恩、查理等名字的示例占位符。埃奇也按照你的思路,直到我看到:p
"bpTableDataName": [
    {
      "name": "aName",
      "email": "aEmail",
      "pwdid": "aPWID"
    },
    {
      "name": "bName",
      "email": "bEmail",
      "pwdid": "bPWID"
    },
    {
      "name": "cName",
      "email": "cEmail",
      "pwdid": "cPWID"
    }
  ],