首页 > 解决方案 > JS排序对象数组,里面有数组

问题描述

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

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

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)

标签: javascriptsorting

解决方案


你可以这样做:

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);


推荐阅读