Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 使用Reduce重新排列数组对象_Javascript_Arrays_Object_Reduce - Fatal编程技术网

Javascript 使用Reduce重新排列数组对象

Javascript 使用Reduce重新排列数组对象,javascript,arrays,object,reduce,Javascript,Arrays,Object,Reduce,我正在尝试使用reduce从数组中获得以下输出,但是,我无法理解reduce如何工作的某些部分,请给出一些解释,以便我能够完全掌握它 最终目标是在将结果缩减为单个数组后,根据vch_编号删除重复对象 还原函数 const result = car.reduce((acc,vch)=>{ const temp = {...acc,[vch.name]:vch.Vehciles} for (const [key, value] of Object.entries(temp)){ cons

我正在尝试使用reduce从数组中获得以下输出,但是,我无法理解reduce如何工作的某些部分,请给出一些解释,以便我能够完全掌握它

最终目标是在将结果缩减为单个数组后,根据vch_编号删除重复对象

还原函数

const result = car.reduce((acc,vch)=>{

const temp = {...acc,[vch.name]:vch.Vehciles}
for (const [key, value] of Object.entries(temp)){
  const fillterd = value.map(item => {
    item.status = key
    return item
  })
}

return temp
}
  ,{})
console.log(result)
//最终期望输出与电流输出

current = { available: 
   [ { make: 'bwm',
       model: 'i8',
       year: 2000,
       vch_number: 51511,
       status: 'available' },
     { make: 'bwm',
       model: 'i8',
       year: 2020,
       vch_number: 51541,
       status: 'available' } ],
  parked: 
   [ { make: 'bwm',
       model: 'i8',
       year: 2000,
       vch_number: 51510,
       status: 'parked' } ],
  service: 
   [ { make: 'bwm',
       model: 'i8',
       year: 2000,
       vch_number: 51510,
       status: 'service' } ] }




desired = [ 
        { make: 'bwm',
           model: 'i8',
           year: 2000,
           vch_number: 51511,
           status: 'available' },
         { make: 'bwm',
           model: 'i8',
           year: 2020,
           vch_number: 51541,
           status: 'available' },
    
       { make: 'bwm',
           model: 'i8',
           year: 2000,
           vch_number: 51510,
           status: 'parked' } ,
    
       { make: 'bwm',
           model: 'i8',
           year: 2000,
           vch_number: 51510,
           status: 'service' }
       ]
//原始API数组

    const car = [
    {
        "name": "available",
        "Vehciles": [
            {
                "make": "bwm",
                "model": "i8",
                "year": 2000,
                "vch_number": 51511,
            },
                        {
                "make": "bwm",
                "model": "i8",
                "year": 2020,
                "vch_number": 51541,

            }
        ]
    },
    {
        "name": "parked",
        "Vehciles": [
            {
                "make": "bwm",
                "model": "i8",
                "year": 2000,
                "vch_number": 51510,

            }
        ]
    },
    {
        "name": "service",
        "Vehciles": [
            {
                "make": "bwm",
                "model": "i8",
                "year": 2000,
                "vch_number": 51510,

            }
        ]
    }
]

您可以映射对象并使用
集进行检查

const
数据=[{name:“可用”,车辆档案:[{make:“bwm”,型号:“i8”,年份:2000,vch_编号:51511},{make:“bwm”,型号:“i8”,年份:2020,vch_编号:51541},{name:“parked”,车辆档案:[{make:“bwm”,型号:“i8”,年份:2000,vch_编号:51510},{name:“service”,车辆档案:[{make:“bwm”,型号:“i8”,年份:2000,vch_编号:51510}],
结果=data.flatMap(
(seen=>({name:status,Vehciles})=>Vehciles.flatMap(o=>seen.has(o.vch_编号)
? []
:(参见。添加(o.vch_编号),{…o,状态})
))
(新一套)
);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
第一个问题是在
.reduce()
函数中使用
{}
作为第二个参数(所谓的
累加器
)。您需要传递一个空数组
[]
。 其次,在这些对象中有
Vehciles
数组,因此必须在其中执行一次转换

有关减速器的更多信息:

我认为关键是要围绕
初始值
累加器
,以及它与
当前值
数组中的关系。reduce()

我已经编写了以下代码:

const car=[
{
“名称”:“可用”,
“车辆档案”:[
{
“制造”:“bwm”,
“型号”:“i8”,
“年份”:2000年,
“vch_编号”:51511,
},
{
“制造”:“bwm”,
“型号”:“i8”,
“年份”:2020年,
“vch_编号”:51541,
}
]
},
{
“名称”:“停放”,
“车辆档案”:[
{
“制造”:“bwm”,
“型号”:“i8”,
“年份”:2000年,
“vch_编号”:51510,
}
]
},
{
“名称”:“服务”,
“车辆档案”:[
{
“制造”:“bwm”,
“型号”:“i8”,
“年份”:2000年,
“vch_编号”:51510,
}
]
}
];
const result=车辆减少量((acc,vch)=>{
const cars=vch.Vehciles.map(车辆=>{
常数温度={
状态:vch.name,
…车辆
};  
返回温度;
}).减少((carAcc,car)=>{
carAcc.推(车);
返回carAcc;
},acc);
返回acc;
}, []);

console.log(结果)
51510的功能是什么?为什么会在结果集中重复两次?每个对象上都有我没有添加到该数组中的时间戳!如果重复,哪个属性与决定相关?在API上,每个道具上都有这个嵌套对象,我删除了它以降低复杂性&创建的at是我的相关道具,带有vch编号
“VehcileStatus”:{“statusId”:2,“createdAt”:“2021-03-16T01:39:48.000Z”,“更新日期”:“2021-03-16T01:39:48.000Z”}
谢谢!可以使用async和reduce合并新的集合结果吗?我不知道。请自己试试。感谢Nina的帮助!很抱歉Filip,第二个reduce中的carAcc数组来自哪里?因为您的目标是将整个数据展平到单个数组中。我们首先传递一个空的
[]
作为第一个
reduce
中的
累加器
我们将其作为参数
acc
。然后我们将
acc
传递给第二个内部
reduce
,该内部
累加器已经在减少由
映射修改的数组(它“注入”了
状态:vch.name
)。我们在内部
reduce
回调中得到
acc
,作为
carAcc
。因此,TLDR;
result
acc
carAcc
是我们作为第二个参数传递给最顶端的
reduce
的同一个数组
[]
。希望有帮助!