javascript - 重构对象数组
问题描述
下面的代码将输入作为对象数组,我想转换为不同的格式。
下面的代码可以正常工作,但我需要对我想要实现的目标进行更多重构的更短格式。
var res = {"matchObject":"{\"data\":[{\"id\":\"jack1\",\"firstname\":\"jack\",\"lastname\":\"hudson\",\"dob\":\"1990-01-01T00:00:00.000Z\",\"email\":\"jack1@yahoo.com\",\"phone\":null,\"orgid\":\"001\"},{\"id\":\"jack2\",\"firstname\":\"Jack\",\"lastname\":\"Clinton\",\"dob\":\"1991-01-01T00:00:00.000Z\",\"email\":\"jack.clinton@yahoo.com\",\"phone\":\"+16464922600\",\"orgid\":\"002\"}]}"};
var parsedObj = JSON.parse(res.matchObject);
var res = [];
for(var key in parsedObj.data){
var emailObj = {};
var phoneObj = {}
if(parsedObj.data[key].email !== null){
emailObj.matchedRes = parsedObj.data[key].email;
emailObj.id = parsedObj.data[key].id;
emailObj.type = "email";
res.push(emailObj);
}
if(parsedObj.data[key].phone !== null){
phoneObj.matchedRes = parsedObj.data[key].phone;
phoneObj.id = parsedObj.data[key].id;
phoneObj.type="phone";
res.push(phoneObj);
}
}
console.log(res);
期望的输出:
[ { matchedRes: 'jack1@yahoo.com', id: 'jack1', type: 'email' },
{ matchedRes: 'jack.clinton@yahoo.com', id: 'jack2', type: 'email' },
{ matchedRes: '+16464922600', id: 'jack2', type: 'phone' } ]
在上面的代码中,使用相同 ID 的电话和电子邮件创建了单独的对象。
解决方案
这是一个解决方案!
我只是做了一个通用减速器,然后我在phone
and上使用它email
。
然后,我只是将两个调用的结果传播到结果数组:)
var res = {"matchObject":"{\"data\":[{\"id\":\"jack1\",\"firstname\":\"jack\",\"lastname\":\"hudson\",\"dob\":\"1990-01-01T00:00:00.000Z\",\"email\":\"jack1@yahoo.com\",\"phone\":null,\"orgid\":\"001\"},{\"id\":\"jack2\",\"firstname\":\"Jack\",\"lastname\":\"Clinton\",\"dob\":\"1991-01-01T00:00:00.000Z\",\"email\":\"jack.clinton@yahoo.com\",\"phone\":\"+16464922600\",\"orgid\":\"002\"}]}"};
var parsedObj = JSON.parse(res.matchObject);
const extractData = (obj, type) => obj.reduce((acc, elt) => (
elt[type] && acc.push({matchedRes: elt[type], id: elt.id, type: type})
, acc),[]);
const result = [...extractData(parsedObj.data, 'email'), ...extractData(parsedObj.data, 'phone')];
console.log(result);
希望这会有所帮助,如果您有任何问题,请随时发表评论;)
推荐阅读
- android - NavigationComponents 透明工具栏
- python - 获取与指定用户名相关的 Jenkins 构建信息
- c# - 在引用上使用 == 时发出警告(Visual Studio 或 ReSharper)
- airflow - 如何在通过命令行设置时在 Airflow 中的变量值中包含空格?
- excel - Excel 按产品名称分组和匹配
- c# - In .NET, is it appropriate to invoke BeginSendTo in the callback?
- algorithm - 迷宫解决 - 圆形路径问题
- javascript - 基于 URL 为网站提供多种语言
- python - 基本计算器不适用于我的功能
- oracle - ORA-01403: 找不到用于使用触发器插入数据的数据