首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将对象数组转换为更改位置的数组

如何将对象数组转换为更改位置的数组
EN

Stack Overflow用户
提问于 2021-07-27 14:12:18
回答 6查看 123关注 0票数 1

我有一组对象:

代码语言:javascript
复制
[
    { id: 'ade', value: 8 },
    { id: 'rtl', value: 17 },
    { id: 'enu', value: 11 }
]

并希望将其转换为:

代码语言:javascript
复制
[
    { id: 'enu', value: 11 },
    { id: 'rtl', value: 17 },
    { id: 'ade', value: 8 },
]

但是我不能反转它等等,因为我必须设置一个语句,即item { id: 'ade', value: 8 }应该是最后一项,而rest必须按id排序。

我试图减少第一个数组,并与第二个数组进行连接。

代码语言:javascript
复制
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)

但它失败了,看起来过于工程化了。我想做得更聪明些。有什么想法吗?

请提任何建议!!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-07-27 14:24:05

您可以使用spread操作符使代码看起来更短,但它的逻辑是相同的:

代码语言:javascript
复制
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')];

因此,第一部分是所有数组元素,最后不包含特定的数组元素,第二部分是最后一个元素。

希望我有所帮助:)

票数 1
EN

Stack Overflow用户

发布于 2021-07-27 14:21:40

您可以过滤、排序,然后用自己的规则连接数组:

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2021-07-27 14:35:53

代码语言:javascript
复制
[
    { 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68546537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档