这样的数组怎样排序?

发布于 2022-09-04 13:28:27 字数 637 浏览 10 评论 0

var a = [{
    color: 'red',
    size: 'A'
},{
    color: 'black',
    size: 'B'
},{
    color: 'white',
    size: 'C'
},{
    color: 'red',
    size: 'C'
},{
    color: 'white',
    size: 'B'
},{
    color: 'black',
    size: 'C'
}]

最终想得到的结果为

var a = [{
    color: 'red',
    size: 'A'
},{
    color: 'red',
    size: 'C`'
},{
    color: 'black',
    size: 'B'
},{
    color: 'black',
    size: 'C'
},{
    color: 'white',
    size: 'C'
},{
    color: 'white',
    size: 'B'
}]

即红色的排在一起,黑色的排在一起,白色的排在一起。同时这些颜色的值会有很多,需要写一个公共的方法,把数组里面的相同颜色的元素排放在一起,怎样做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好听的两个字的网名 2022-09-11 13:28:27
> a.sort((x,y)=>x.size>y.size).sort((x,y)=>x.color>y.color)
[ { color: 'black', size: 'B' },
  { color: 'black', size: 'C' },
  { color: 'red', size: 'A' },
  { color: 'red', size: 'C' },
  { color: 'white', size: 'B' },
  { color: 'white', size: 'C' } ]
晒暮凉 2022-09-11 13:28:27

楼上的思路是正确的。但如果你一定要按照先 "red" 然后 "black" 再 "white" 的顺序来排,可以这样:

var order = ['red', 'black', 'white']

a.sort((x, y) => x.size < y.size).sort((x, y) => order.indexOf(x.color) < order.indexOf(y.color) ? -1 : 1)

这样你就可以得到先 "red",然后 "black", 然后 "white" 的顺序,并且每个组的 "size" 也是按照字母顺序排好的


如果你不喜欢写死,或者 color 有多少种是不确定的,那你也可以这样写,把不重复的 color按出现顺序提取出来:

var colorArray = a.map(ele => ele.color).filter((element, index, arr) => arr.indexOf(element) === index)

// ["red", "black", "white"]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文