我有一组对象:
[
{ id: 'ade', value: 8 },
{ id: 'rtl', value: 17 },
{ id: 'enu', value: 11 }
]并希望将其转换为:
[
{ id: 'enu', value: 11 },
{ id: 'rtl', value: 17 },
{ id: 'ade', value: 8 },
]但是我不能反转它等等,因为我必须设置一个语句,即item { id: 'ade', value: 8 }应该是最后一项,而rest必须按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)但它失败了,看起来过于工程化了。我想做得更聪明些。有什么想法吗?
请提任何建议!!
发布于 2021-07-27 14:24:05
您可以使用spread操作符使代码看起来更短,但它的逻辑是相同的:
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')];因此,第一部分是所有数组元素,最后不包含特定的数组元素,第二部分是最后一个元素。
希望我有所帮助:)
发布于 2021-07-27 14:21:40
您可以过滤、排序,然后用自己的规则连接数组:
let orig = [
{ id: 'ade', value: 8 },
{ id: 'rtl', value: 17 },
{ id: 'enu', value: 11 }
]
sorted = orig.filter(e => e.id !== 'ade').sort((a, b) =>
a.id.localeCompare(b.id)
).concat(orig.find(e => e.id === 'ade'))
console.log(sorted)
发布于 2021-07-27 14:35:53
[
{ id: 'ade', value: 8 },
{ id: 'rtl', value: 17 },
{ id: 'enu', value: 11 },
].sort((a,b) => a.id == 'ade' ? 1 : b.id == 'ade' ? -1 : a.id > b.id ? 1 : -1)https://stackoverflow.com/questions/68546537
复制相似问题