Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我想对数组的元素进行排序_Javascript_Node.js - Fatal编程技术网

Javascript 我想对数组的元素进行排序

Javascript 我想对数组的元素进行排序,javascript,node.js,Javascript,Node.js,假设我有如下数组 var array=[3,4,5,5,5,6,8,3,12,1,1,1]; 那么结果应该是 array=[5,1,3,4,6,8,12]; 在JavaScript或nodejs中需要实现以下一种方法: JSBIN: var数组=[3,4,5,5,6,8,3,12,1,1,1]; var c=array.reduce(函数(a,b){ a[b]=++a[b]| 1; 返回a; }, {}); var keys=Object.keys(c); var nn=keys.sort(

假设我有如下数组

var array=[3,4,5,5,5,6,8,3,12,1,1,1];
那么结果应该是

array=[5,1,3,4,6,8,12];
在JavaScript或nodejs中需要实现以下一种方法: JSBIN:

var数组=[3,4,5,5,6,8,3,12,1,1,1];
var c=array.reduce(函数(a,b){
a[b]=++a[b]| 1;
返回a;
}, {});
var keys=Object.keys(c);
var nn=keys.sort(函数(a,b){
if(c[a]
我在这篇文章中结合使用了和普通JavaScript数组方法:

但是,
“5”
“1”
的顺序与
3,4,6,8,12
的顺序不同,因为没有为具有相同计数的数字指定排序顺序

上面所做的是创建一个
number=>count
(例如
{“1”:3,“5”:3}
)的映射,然后将它们作为元组进行配对(因为对象在JavaScript中无法确定排序:
[[[“1”,3],“5”,3]
)。然后,我们只需根据计数对元组集合进行排序,并映射元组集合以仅返回数字(例如,
[“1”,“5”,“/*等。*/]
)。

函数sortArray(数组){
var reducedArray=array.filter(函数(项,位置){//一个没有重复项的副本
返回数组。indexOf(item)==pos;
})
var elementFreq={}//包含元素频率的对象
对于(var i=0;i
var数组=[3,4,5,5,6,8,3,12,1,1,1];
var obj={};
array.forEach(e=>obj[e]=obj[e]+1 | | 1);
var sorted=Object.keys(obj)
.map(e=>({n:e,times:obj[e]}))
.排序((a,b)=>b.次-a.次)
.map(e=>e.n);

文件写入(已排序)
请告诉我您遇到的问题。所以不要为您编写代码。这是可以理解的代码,但效率不高。您肯定不希望每次比较两个项目时都在整个数组中运行。@Harangue您是对的,谢谢您的反馈。我编辑代码是为了在c之前存储元素频率默哀。
var array=[3,4,5,5,5,6,8,3,12,1,1,1];

var c = array.reduce(function(a, b) {
  a[b] = ++a[b] || 1;
  return a;
}, {});


var keys = Object.keys(c);


var nn = keys.sort(function(a, b) {
  if (c[a] < c[b]) {
    return 1;
  } else {
    return -1;
  }
}).map(function(a) {return Number(a)});
var arr = [3,4,5,5,5,6,8,3,12,1,1,1];

var sorted = _.sortBy(_.toPairs(arr.reduce(function(agg, curr) {
  agg[curr] = agg[curr] ? agg[curr] + 1 : 1;

  return agg;
}, {})), function(pair) {
  return -pair[1];
}).map(function(pair) {
  return pair[0];
});

console.log(sorted); // => ["1", "5", "3", "4", "6", "8", "12"]
function sortArray(array) { 

    var reducedArray = array.filter(function(item, pos) { //A copy without duplicates
       return array.indexOf(item) == pos;
    })

    var elementFreq = {} //Object that contains element frequencies
    for (var i=0; i<reducedArray.length; i++) {
        var count = 0;
        for (var j=0; j<array.length; j++) {
            if (array[j] == reducedArray[i]) {
                count++;
            }
        }
        elementFreq[array[i]] = count;
    }

    function compare(a,b) { //compares the frequency of two elements
        return elementFreq[b]-elementFreq[a]
    }

    reducedArray.sort(compare) //sorts reducedArray based using compare function

    return reducedArray 
}