JS 使用数组对对象数组进行排序

时间:2021-06-16 15:18:55

标签: javascript sorting

我的应用中有一个特定的列负责呈现状态。 我希望能够根据该状态进行排序。

模型看起来像这样。看看下面的数据:

const data = [
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors: ["Error1"], warnings:['Warning1']},
  {errors:undefined, warnings: undefined},
  {errors: undefined, warnings: ["warning2"]},
  {errors: undefined, warnings: ["warning3", "Warning4"]},
  {errors: ["Error1", "Error4"], warnings:undefined}
]

排序后的数据应如下所示:

obj 有错误和警告 > obj 只有错误 > obj 只有警告 > 正确的数据

我像这样尝试过,但经过一段时间和尝试后,我被卡住了:

const sorted = data.sort((valueA, valueB) => {
    if(valueA.errors && !valueB.errors) {
      return -1
    } if(valueA.errors)
});
console.log(sorted)

1 个答案:

答案 0 :(得分:2)

你可以这样做:

const data = [
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors:undefined, warnings: undefined},
  {errors: ["Error1"], warnings:['Warning1']},
  {errors:undefined, warnings: undefined},
  {errors: undefined, warnings: ["warning2"]},
  {errors: undefined, warnings: ["warning3", "Warning4"]},
  {errors: ["Error1", "Error4"], warnings:undefined}
]

const result = data.sort( (a,b) => {
  if(a.errors && a.warnings)
    return -1
  else if (b.errors && b.warnings)
    return 1;
  
  if(a.errors)
    return -1
  else if(b.errors)
    return 1;
  
  if(a.warnings)
    return -1
  else if(b.warnings)
    return 1;
    
  return 1;
  
})

console.log(result);

相关问题