首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对数组进行排序,使特定项在数组中排在第一位

对数组进行排序,使特定项在数组中排在第一位
EN

Stack Overflow用户
提问于 2011-08-08 00:32:28
回答 8查看 32.3K关注 0票数 29

我有一个这样的数组:

[{flag: true, other: 1},
 {flag: true, other: 2},
 {flag: false, other: 3},
 {flag: true, other: 4},
 {flag: true, other: 5},
 {flag: true, other: 6},
 {flag: false, other: 7}]

我想要这个:

[{flag: false, other: 3},
 {flag: false, other: 7},
 {flag: true, other: 1},
 {flag: true, other: 2},
 {flag: true, other: 4},
 {flag: true, other: 5},
 {flag: true, other: 6}]

基本上,我希望如果array[2].flag === false (或我选择的任何其他值)将匹配的元素放在数组中的第一个,但在前面的匹配元素之后。不匹配的元素将保持原来的顺序。

外观的顺序很重要。

如何在JavaScript中做到最好?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-08-08 00:39:14

这不是真正的排序。您只需在数组中循环两次,然后构建一个新数组:

var result = [];
for (var i = 0; i < arr.length; i++) {
  if (arr[i].flag === false) {
    result.push(arr[i]);
  }
}
for (var i = 0; i < arr.length; i++) {
  if (!arr[i].flag === false) {
    result.push(arr[i]);
  }
}

您还可以使用两个结果数组和一个循环来执行此操作,并连接结果:

var result1 = [], result2 = [];
for (var i = 0; i < arr.length; i++) {
  if (arr[i].flag === false) {
    result1.push(arr[i]);
  } else {
    result2.push(arr[i]);
  }
}
var result = result1.concat(result2);
票数 12
EN

Stack Overflow用户

发布于 2016-06-01 00:45:35

ECMAScript6引入的Spread syntax (例如,[...object])使用数组的reduce方法使这一点变得相对简单:

const arr = [
  { flag: true, other: 1 },
  { flag: true, other: 2 },
  { flag: false, other: 3 },
  { flag: true, other: 4 },
  { flag: true, other: 5 },
  { flag: true, other: 6 },
  { flag: false, other: 7 }
];

const sortedArr = arr.reduce((acc, element) => {
  if (!element.flag) {
    return [element, ...acc];
  }
  return [...acc, element];
}, []);

我发现这个example of extended parameter handling真的很有帮助。

票数 36
EN

Stack Overflow用户

发布于 2011-08-08 00:37:52

编写一个自定义排序函数,并使用标志来增加优先级:

array.sort(function(a,b) {
  if (!a['flag'] && b['flag'])
    return 1;
  if (a['flag'] && !b['flag'])
    return -1;
  return a['other'] - b['other']
});

基本上,我假设列表中设置了标志的条目优先于没有标志的条目。因此,如果a没有该标志,而b有,则返回1(选择b)。如果a返回,而b没有返回a。

在两者都设置了标志或两者都没有设置的情况下,cmp正常运行。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6974069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档