按多个属性对数组中的对象进行排序(不存在可能性)



我正在尝试对这个数组进行排序:

[
  {
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  },
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  }
]

如您所见,有些对象没有parentId.我需要将这个放在顶部,其余的将按id排序.

这是我的代码:

input.sort(function (a, b) {
    if (typeof a.parentId === 'undefined')) 
      return -1;
    else
      return a.id - b.id;
  });

不过它不起作用。可以这样做吗?

预期成果:

[
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  },
  {
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  }
]

提前致谢

我建议使用 Lodash js 库

var arr = [
  {
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  },
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  }
];
var sortedArr = _.orderBy(arr, 'parentId', 'desc');
console.log(sortedArr);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>

需要测试 A 和 B 并反转。 如果 A 缺少道具,则使用 -1 如果 B 使用 +1

let arr = [{
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  },
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  }
];
const sortPredicate = (a,b) => {
  if (a.hasOwnProperty('parentId') === false) {
    return -1;
  } else if(b.hasOwnProperty('parentId') === false) {
    return 1;
  } else {
    return a.id - b.id;
  }
};
console.log(arr.sort(sortPredicate));

最新更新