没有一个名称快速排序数组

时间:2016-12-30 07:23:40

标签: javascript

我需要按名称排序数组

['b','a' ,'c' ,'e' ,'d' , .....] 

但我希望'c'推送以resurt数组开始!

['c','a' , 'b' , 'd' ,'e' , ....]

我怎么能这样做?

function sortByKey(array, key) {


    return array.sort(function (a, b) {

        var x = a[key];
        var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });

是的我可以从数组中删除'c'并将其添加到最终结果中但我会搜索 最佳案例

7 个答案:

答案 0 :(得分:4)

您可以创建另一个允许您配置priority元素的数组,然后您可以比较自定义排序函数中的值。

注意:Fast不确定,但这样可以对优先级元素进行排序和配置

&#13;
&#13;
var data = ['b', 'a', 'c', 'e', 'd']
var priority = ['c'];

function getPriority(item) {
  var max_value = 9999999999;
  var index = priority.indexOf(item);
  return index === -1 ? max_value : index
}

data.sort(function(a, b) {
  if ([a, b].some(function(x) {
    return priority.indexOf(x) > -1
  })) {
    return getPriority(a) - getPriority(b);
  } else {
    return a.localeCompare(b);
  }
});

console.log(data)
&#13;
&#13;
&#13;

答案 1 :(得分:2)

function sortByKey(array) {
  return array.sort(function(a, b) {
    if (a == 'c') {
      return -1;
    } else if (b == 'c') {
      return 1;
    } else {
      return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    }
  });
}

var data = ['b', 'a', 'c', 'e', 'd']

console.log(sortByKey(data))

答案 2 :(得分:2)

您可以利用Array.prototype.sort()并执行以下操作:

&#13;
&#13;
const items = ['b', 'a', 'c', 'e', 'd']
//const items = ['c', 'a', 'b', 'd', 'e'];

const sortedItems = items.sort(function(a, b) {

  if (a === 'c' || b === 'c') {
    return -2;
  }
  if (a < b) {
    return -1;
  }
  if (a > b) {
    return 1;
  }

  return 0;
});

console.log(sortedItems)
&#13;
&#13;
&#13;

我说你应该一直使用原生的东西,因为如果某些引擎决定优化这种方法,你将来可能会受益。

答案 3 :(得分:2)

使用String.localeCompare()函数的简单解决方案:

var arr = ['b','a' ,'c' ,'e' ,'d'];
arr.sort(function (a,b) {
    return (a == 'c' || b == 'c')? 1 : a.localeCompare(b);
});

console.log(arr);

答案 4 :(得分:1)

使用javascript函数获得最快的结果

jsonb_array_elements
select t ->> 'Version'
from assessment_info, json_array_elements(result_json -> 'PRODUCTION' -> 'KBM') as t(d)

答案 5 :(得分:1)

您可以使用特殊处理方法对value2_start = content.find('value', value1_end) value2_end = content.find(';', value2_start) 的顺序进行排序,并使用排序顺序的对象和默认值。

此方法允许将另一个字符串移动到排序顺序的末尾,其值为'c'或任何大于1的值。

0

答案 6 :(得分:1)

第1步:

使用数组sort()方法对数组进行排序。

第2步:

使用数组filter()方法从数组中过滤元素。

第3步:

使用数组unshift()方法。它将与数组push()方法一样工作。唯一的区别是它将元素添加到数组的开头而不是结尾。

工作演示:

var orgArray = ['b','a' ,'c' ,'e' ,'d','c'];
orgArray.sort();
var newArray = orgArray.filter(function(element){
  return element !== "c";
});
newArray.unshift("c");
console.log(newArray);