微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Reduce 重新排列数组对象

如何解决使用 Reduce 重新排列数组对象

我正在尝试使用 reduce 从数组中获取以下输出,但是,我无法理解有关 reduce 行为的某些部分,请欣赏一些解释,以便我能够完全掌握它。

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

归约函数

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)

// 最终期望输出 vs 当前输出

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




desired = [ 
        { make: 'bwm',status: 'parked' },status: 'service' }
       ]

// 原始 API 数组

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

解决方法

第一个问题是您在 {} 函数中使用 accumulator 作为第二个参数(所谓的 .reduce())。您需要传递一个空数组 []。 其次,您在这些对象中拥有 Vehciles 数组,因此您必须在内部再执行一次转换。

关于减速器的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

我认为关键是围绕 initialValueaccumulator 以及当涉及到 currentValue 时它与 Array.reduce() 有何关系

我整理了这段代码:

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

const result = car.reduce((acc,vch)=>{
  const cars = vch.Vehciles.map(vehicle => {
    const temp = {
        status: vch.name,...vehicle
      };  
    return temp;
  }).reduce((carAcc,car) => {
    carAcc.push(car);
    return carAcc;
  },acc);
  
  return acc;
},[]);

console.log(result)

,

您可以映射对象并使用 Set 检查。

const
    data = [{ name: "available",Vehciles: [{ make: "bwm",model: "i8",year: 2000,vch_number: 51511 },{ make: "bwm",year: 2020,vch_number: 51541 }] },{ name: "parked",vch_number: 51510 }] },{ name: "service",vch_number: 51510 }] }],result = data.flatMap(
        (seen => ({ name: status,Vehciles }) => Vehciles.flatMap(o => seen.has(o.vch_number) 
            ? []
            : (seen.add(o.vch_number),{ ...o,status })
        ))
        (new Set)
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。