首页 > 解决方案 > 数组的特定排序项

问题描述

假设我有一个包含 3 个项目的数组,它们是随机创建的。其中一个具有流行的布尔值:true,而其余的则没有。我想把流行的项目作为索引1(居中)像这样[例子,流行,例子]

我试着这样排序

 items.sort((a, b) => {
   if (a.id < b.id) {
     return -1;
   }
   if (a.id > b.id) {
     return 1;
   }
   return 0;
 });

但在这种情况下,出于某种原因,我必须将特定 ID(从 1 到 3)添加到所有这 3 个项目中,我不能给他们 ID,所以这个解决方案不能按需要工作。

标签: javascriptfunctionsortingindexingreplace

解决方案


由于它总是三项,只需迭代数组,找到true一项,并将其索引与 index 交换1

const items = [
  {x: false},
  {x: false},
  {x: true},
];

for (const [i, o] of items.entries()) {
  if (o.x) {
    [items[i], items[1]] = [items[1], items[i]];
    break;
  }
}

console.log(items);

或者因为实际上只有两种可能性,所以你可以不使用循环。

const items = [
  {x: false},
  {x: false},
  {x: true},
];

var idx = items[0].x ? 0 :
          items[2].x ? 2 :
                       1;

[items[idx], items[1]] = [items[1], items[idx]];

console.log(items);


推荐阅读