Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 合并匹配元素,迭代并分离集合中的元素和非匹配元素_Javascript_Node.js_Underscore.js_Lodash - Fatal编程技术网

Javascript 合并匹配元素,迭代并分离集合中的元素和非匹配元素

Javascript 合并匹配元素,迭代并分离集合中的元素和非匹配元素,javascript,node.js,underscore.js,lodash,Javascript,Node.js,Underscore.js,Lodash,我不熟悉Node\JS,一直在研究如何在集合中合并匹配元素并迭代不匹配的元素以创建新集合。到目前为止,我已经使用lodash对粘贴在下面的数据进行了分组(分组输入),但无法确定如何获得所需的输出 我愿意使用lodash\下划线\javascript或与Node兼容的任何其他库 谢谢你的帮助和建议 分组输入: [{mod_AccountNumber:'0001', 模块Id:'123456', mod_姓氏:“SMITH”, mod_名字:“NANCY”, mod_任命地点:“10号房间”, m

我不熟悉Node\JS,一直在研究如何在集合中合并匹配元素并迭代不匹配的元素以创建新集合。到目前为止,我已经使用lodash对粘贴在下面的数据进行了分组(分组输入),但无法确定如何获得所需的输出

我愿意使用lodash\下划线\javascript或与Node兼容的任何其他库

谢谢你的帮助和建议

分组输入:
[{mod_AccountNumber:'0001',
模块Id:'123456',
mod_姓氏:“SMITH”,
mod_名字:“NANCY”,
mod_任命地点:“10号房间”,
mod_任命日期:“10/26/18”,
mod_任命时间:'0900'},
{mod_AccountNumber:'0001',
模块Id:'123456',
mod_姓氏:“SMITH”,
mod_名字:“NANCY”,
mod_任命地点:“11号房间”,
mod_任命日期:“10/26/18”,
mod_任命时间:'0930'},
{mod_AccountNumber:'0001',
mod_Id:'654321',
mod_姓氏:“JONES”,
mod_名字:“娜塔莎”,
mod_任命地点:“11号房间”,
mod_任命日期:“10/26/18”,
mod_任命时间:'0930'},
{mod_AccountNumber:'0001',
mod_Id:'654321',
mod_姓氏:“JONES”,
mod_名字:“娜塔莎”,
mod_任命地点:“12号房间”,
mod_任命日期:“10/26/18”,
mod_任命时间:'1015'}
]
期望输出:
[{mod_AccountNumber:'0001',
模块Id:'123456',
mod_姓氏:“SMITH”,
mod_名字:“NANCY”,
mod_任命地点_1:“10号房间”,
mod_任命时间_1:'0900',
mod_任命地点2:“11号房间”,
mod_任命时间_2:'0930'},
{mod_AccountNumber:'0001',
mod_Id:'654321',
mod_姓氏:“JONES”,
mod_名字:“娜塔莎”,
mod_任命地点_1:“11号房间”,
mod_任命时间_1:'0930',
mod_任命地点2:“12号房间”,
mod_任命时间_2:'1015'}

]
总体上更好的方法是将这些日期/时间/位置转换为数组。但考虑到目前的问题,我们可以这样做:

const data=[{mod_AccountNumber:'0001',mod_Id:'123456',mod_LastName:'SMITH',mod_FirstName:'NANCY',mod_AppointmentLocation:'ROOM10',mod u AppointmentDate:'10/26/18',mod u AppointmentTime:'0900'},{mod_账号:'0001',mod_Id:'123456',mod_姓:'SMITH',mod_姓:'NANCY',mod_任命地点:'ROOM11',mod_任命日期:'10/26/18',mod_任命时间:'0930'},{国防部账号:'0001',国防部Id:'654321',国防部姓氏:'JONES',国防部姓氏:'NATASHA',国防部任命地点:'ROOM11',国防部任命日期:'10/26/18',国防部任命时间:'0930'},{mod_账号:'0001',mod_Id:'654321',mod_姓氏:'JONES',mod_姓:'NATASHA',mod_任命地点:'ROOM12',mod_任命日期:'10/26/18',mod_任命时间:'1015'}]
常量结果=(数据)
.groupBy('mod_Id'))
.values()
.map(x=>.values(u.transform(x,(r,c,i)=>{
r[c.mod\u Id]=扩展(r[c.mod\u Id]{
mod_Id:c.mod_Id,
mod_AccountNumber:c.mod_AccountNumber,
mod_LastName:c.mod_LastName,
mod_FirstName:c.mod_FirstName,
[`mod_AppointmentLocation${i+1}`]:c.mod_AppointmentLocation,
[`mod_AppointmentDate${i+1}`]:c.mod_AppointmentDate,
[`mod_AppointmentTime${i+1}`]:c.mod_AppointmentTime,
})}, {})))
.flatte()
.value()
console.log(结果)

您是否坚持使用这种输出格式?通常,当您尝试使用带有数字的变量名时,如
mod\u AppointmentTime\u 1
&
mod\u AppointmentTime\u 2
您应该使用数组。不鼓励使用仅代码的答案-尝试添加一些解释。此外,这不会产生所需的格式卡匹配键,如
mod_AppointmentLocation
。感谢Akrion的详细建议。我更喜欢数组的想法,并决定使用它。当我剪切并粘贴您提供的代码时,如果获得“schedule:[[Object],[Object]]”。我仔细检查了所有内容:我正在使用lodash 4.17.11[{mod_Id:'123456',mod_AccountNumber:'0001',mod_LastName:'SMITH',mod_FirstName:'NANCY',日程表:[[Object],[Object]},{mod_Id:'654321',mod_AccountNumber:'0001',mod LastName:'JONES',mod u FirstName:'NATASHA',日程表:[[Object Object],[Object Object]}]这对我来说似乎是可行的……这是JSFIDLE:谢谢!在我发表评论之前,我用JSBin检查了它,它也在那里工作。有趣的是,Node JS中同样的代码生成了[object object object]。我甚至将lodash降级为4.17.10。奇怪。我在Repl中也得到了工作代码:谢谢Akiron。感谢你的帮助。你的代码对我来说工作得很好。
const {groupBy, values, merge} = require('lodash');
// input...
const output = values(
    groupBy(input, 'id')
).map(chunks => merge(...chunks));