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_Arrays_Mapping - Fatal编程技术网

Javascript 如何映射此结果?

Javascript 如何映射此结果?,javascript,node.js,arrays,mapping,Javascript,Node.js,Arrays,Mapping,这不是一个考试题或任何东西,我正在做一个个人项目,但在这个问题上有真正的大脑迷雾。我希望得到社区的一些帮助:) 我有一个数组 const result1 = [ { "time":"17 : 30","bays":[{"number":"bay-3","availability":false},{"number":"bay-2",&quo

这不是一个考试题或任何东西,我正在做一个个人项目,但在这个问题上有真正的大脑迷雾。我希望得到社区的一些帮助:)

我有一个数组

const result1 = [
{ "time":"17 : 30","bays":[{"number":"bay-3","availability":false},{"number":"bay-2","availability":false},{"number":"bay-1","availability":false}]},

{"time":"18 : 00","bays":[{"number":"bay-3","availability":false},{"number":"bay-2","availability":false},{"number":"bay-1","availability":false}]},

{"time":"18 : 30","bays":[{"number":"bay-3","availability":false},{"number":"bay-2","availability":false},{"number":"bay-1","availability":false}]}];
但是,如何以干净的方式将数据从result1映射到result2呢

const result2 = [
{ "number":"bay-1”,”times”:[{“time":"17 : 30","availability":false},{"time":"18 : 00","availability":false},{"time":"18 : 30","availability":false}]},

{"number":"bay-2”,”times”:[{“time":"17 : 30","availability":false},{"time":"18 : 00","availability":false},{"time":"18 : 30","availability":false}]},

{"number":"bay-3””,”times”:[{“time":"17 : 30","availability":false},{"time":"18 : 00","availability":false},{"time":"18 : 30","availability":false}]}];

对于这项任务,我们首先要创建一个新的数组,其中包含我们将根据
number
属性组织的新值。我们可以通过从一个嵌套对象
数组(result1[0].bays.length).fill().map()
中检索
bays
属性的长度来实现这一点。一种更简单的方法是对相同的
bays
属性执行
map()
,如:
result1[0].bays.map()

在此之后,我们可以按照
result2
所需的格式重建对象,并将这些新对象映射回我们正在创建的新数组。要添加
number
属性,我们可以简单地将其添加到返回对象中,就像这样
{number}
对于新的
times
属性,我们需要使用
map()迭代原始
result1
数组
并检索
bays
属性下的匹配对象,该属性的
number
属性值与我们在顶级数组中迭代的属性值匹配。为此,我们只希望保留
availability
属性,因为我们已经在上层对象中设置了time属性

result1[0].bays.map(({number})=>({number,times:result1.map({time,bays})=>({time,availability:bays.find(bay=>bay.number==number.availability}))
最后,我们只需要对返回的对象进行排序,以便按间隔编号对
result1
进行数字排序。这将为您提供所需的结果:

result1[0].bays.map(({number})=>({number,times:result1.map({time,bays})=>({time,availability:bays.find(bay=>bay.number==number.availability}))
.sort((a,b)=>a.number.split('-').reverse()[0]-b.number.split('-').reverse()[0])
/* -> [
{
编号:“1号湾”,
时代:[
{时间:“17:30”,可用性:false},
{时间:“18:00”,可用性:false},
{时间:“18:30”,可用性:false}
]
},
{
编号:“海湾2号”,
时代:[
{时间:“17:30”,可用性:false},
{时间:“18:00”,可用性:false},
{时间:“18:30”,可用性:false}
]
},
{
编号:“3号湾”,
时代:[
{时间:“17:30”,可用性:false},
{时间:“18:00”,可用性:false},
{时间:“18:30”,可用性:false}
]
}
]
*/
我们还可以创建一个函数,该函数对数组执行相同的计算,并返回由
number
属性排列的新数组:

const result1=[
{时间:“17:30”,间隔:[{number:“bay-3”,可用性:false},{number:“bay-2”,可用性:false},{number:“bay-1”,可用性:false}]},
{时间:“18:00”,间隔:[{number:“bay-3”,可用性:false},{number:“bay-2”,可用性:false},{number:“bay-1”,可用性:false}]},
{时间:“18:30”,间隔:[{number:“bay-3”,可用性:false},{number:“bay-2”,可用性:false},{number:“bay-1”,可用性:false}]}
];
const organizeByNumber=arr=>arr[0].bays.map({number})=>({number,times:arr.map({time,bays})=>({time,availability:bays.find(bay=>bay.number==number.availability})).sort((a,b)=>a.number.split('-').reverse()[0]-b.number.split('-').reverse()[0]);
const result2=organizeByNumber(结果1);

console.log(result2)您只需将数组减少为一个按间隔编号键控的对象,然后再转换回列表即可

const result1=[
{
“时间”:“17:30”,
“间隔”:[
{“编号”:“间隔-10”,“可用性”:false},
{“编号”:“间隔-2”,“可用性”:false},
{“编号”:“间隔-1”,“可用性”:false}
]
},
{
“时间”:“18:00”,
“间隔”:[
{“编号”:“间隔-10”,“可用性”:false},
{“number”:“bay-2”,“availability”:true},
{“编号”:“间隔-1”,“可用性”:false}
]
},
{
“时间”:“18:30”,
“间隔”:[
{“number”:“bay-10”,“availability”:true},
{“编号”:“间隔-2”,“可用性”:false},
{“编号”:“间隔-1”,“可用性”:false}
]
}];
const result2=Object.entries(
结果1.reduce((acc,{bays,time})=>{
forEach({number,availability})=>{
acc[编号]=(acc[编号]| |[])。concat({
“可用性”:可用性,
“时间”:时间
});
});
返回acc;
}, {}
))
.reduce((acc,[bayNumber,times])=>{
返回acc.concat({“number”:bayNumber,“times”:times});
}, [])
.sort((a,b)=>a.number.localeCompare(b.number,未定义,
{numeric:true,灵敏度:'base'});

console.log(result2)似乎您的结果2不正确。你能更新它吗?@Sal我发布了我的解决方案,它符合你的要求。有机会的时候请看一看。@Brandonmconnell太棒了,非常感谢much@Sal谢谢,你能考虑接受我的解决方案吗?