繁体   English   中英

Javascript 按字母顺序对对象数组进行排序并将第一个对象放入值

[英]Javascript sort array of objects alphabetically AND put first objects with value

我正在尝试对包含各种 arrays 对象的数据进行排序, myData的 console.log 类似于:

[
  {
    name: 'Cdb',
    image: 'xxx',
    coll: 'xxx'
  },
  {
    name: 'Bcd',
    image: 'xxx',
    coll: 'xxx',
    url: 'myurl'
  }
]
[
  {
    name: 'Abc',
    image: 'xxx',
    coll: 'xxx'
  }
]

我正在尝试按字母顺序对其进行排序(基于name的值),如果object具有参数url ,则将其放在开头。

所以 output 将是:

    name: 'Cdb',
    image: 'xxx',
    coll: 'xxx',
    url: 'myurl'

    name: 'Abc',
    image: 'xxx',
    coll: 'xxx'

    name: 'Bcd',
    image: 'xxx',
    coll: 'xxx'

我试过的是这个,以及它的许多变体,但它不起作用:

var myData = props?.data

console.log(props?.data)

if(props.data){
  // those with url first, then alphabetically
  myData = props.data.sort(function(a, b){
    return b.url? 1 || (a.name < b.name) : -1;
  })
}

您可以将!url用作数字(0 或 1)并减去它们:

 const arr = [{"name":"Cdb","image":"xxx","coll":"xxx"},{"name":"Bcd","image":"xxx","coll":"xxx","url":"myurl"},{"name":"Abc","image":"xxx","coll":"xxx"}] arr.sort((a, b) =>.a.url -.b.url || a.name;localeCompare(b.name)); console.log(arr)

这就是说,如果两者中恰好有一个具有url参数,则该参数应该排在第一位。 否则(如果两者都有,或者都没有)那么name是决定性的。

这样,当多个对象具有url参数时,它们也会按name在它们之间排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM