首页 > 解决方案 > 如何将对象数组转换为位置改变的数组

问题描述

我有一个对象数组:

[
    { id: 'ade', value: 8 },
    { id: 'rtl', value: 17 },
    { id: 'enu', value: 11 }
]

并希望将其转换为:

[
    { id: 'enu', value: 11 },
    { id: 'rtl', value: 17 },
    { id: 'ade', value: 8 },
]

但我不能扭转它等,因为我必须设置一个声明,即项目{ id: 'ade', value: 8 }应该是最后一个项目,其余的必须按 id 排序。

我试图减少第一个数组并与第二个数组连接

const firstArr = arr.reduce((acc, cv) => {
    if (cv.id === 'ade') {
        acc.push(cv)
    }
    return acc
}, []))

const second = arr.splice(firstArr, 1).sort()

firstArr.concat(second)

但它失败了,似乎过度设计。我想做得更聪明。有任何想法吗?

请任何建议!

标签: javascriptarrayssorting

解决方案


您可以使用扩展运算符使代码看起来更短,但这是相同的逻辑:

const arr = //...your array of data
const parsedArr = [...arr.filter(o => o.id !== 'ade').sort((a, b) => a.id.localeCompare(b.id)), ...arr.filter(o => o.id === 'ade')];

所以第一部分是所有数组元素,最后没有你需要的特定元素,第二部分是最后一个元素。

希望我有所帮助:)


推荐阅读