对象数组像键值对一样返回,并根据数组上的一个键仅返回 2 个值

时间:2021-03-17 19:13:23

标签: javascript jquery typescript ecmascript-6

我有汽车对象数组,我想根据包含 2 个值对的对象的 make value arry 返回数组

var cars = 
    [ { make: 'audi', model: 'r8',      year: '2012' } 
    , { make: 'ford', model: 'mustang', year: '2012' } 
    , { make: 'ford', model: 'fusion',  year: '2015' } 
    , { make: 'kia',  model: 'optima',  year: '2012' } 
    , { make: 'audi', model: 'rs5',     year: '2013' } 
    ]

输出像

[ { Id: 'audi-group', value: 'audi-group' }
, { id: 'r8',   value: '2012' }
, { id: 'r5',   value: '2013' },
{id:'ford-group', value:'ford-group'},
{id: 'fusion',  value: '2015' }
//...
]

所有基于“make”的订单都应该来

2 个答案:

答案 0 :(得分:0)

let cars = [
  { make: "audi", model: "r8", year: "2012" },
  { make: "ford", model: "mustang", year: "2012" },
  { make: "ford", model: "fusion", year: "2015" },
  { make: "kia", model: "optima", year: "2012" },
  { make: "audi", model: "rs5", year: "2013" },
];

cars = cars.sort((a, b) => a.make.localeCompare(b.make))

let formattedCars = []

cars.forEach((car, index) => {
    const { make, model, year } = car
    const group = make.concat('-group')
    if ((cars[index - 1] || {}).make !== cars[index].make) {
        formattedCars = [...formattedCars, { id: group, value: group }]
    }
    formattedCars = [...formattedCars, { id: model, value: year }]
})

console.log(formattedCars)

答案 1 :(得分:0)

const cars = [
    { make: "audi", model: "r8", year: "2012" },
    { make: "ford", model: "mustang", year: "2012" },
    { make: "ford", model: "fusion", year: "2015" },
    { make: "kia", model: "optima", year: "2012" },
    { make: "audi", model: "rs5", year: "2013" },
];

const sortedCars = cars.sort((a, b) => {
    const makeA = a.make.toUpperCase();
    const makeB = b.make.toUpperCase();

    let comparison = 0;
    if (makeA > makeB) {
        comparison = 1;
    } else if (makeA < makeB) {
        comparison = -1;
    }
    return comparison;
})

let formattedCars = []
sortedCars.forEach((car, index) => {
    const { make, model, year } = car
    const group = make.concat('-group')

    if ((cars[index - 1] || {}).make !== cars[index].make) {
        formattedCars = [...formattedCars, { id: group, value: group }]
    }
    formattedCars = [...formattedCars, { id: model, value: year }]
})

console.log(formattedCars)