Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中创建str中字母频率的映射_Javascript_Sorting_Object - Fatal编程技术网

在Javascript中创建str中字母频率的映射

在Javascript中创建str中字母频率的映射,javascript,sorting,object,Javascript,Sorting,Object,大家好,我想创建一个函数,它接收字符串并返回一个对象,该对象具有字符串中字母频率的映射。此外,我希望我的函数返回按频率降序排序的对象。所以我期望的是letterfreqssabb=>{b:3,s:2,a:1}。我写了一个函数,返回频率映射,这个函数是 function letterfreq(str) { var mapping = {}; var NoSpaceStr = str.replace(/[\s]/g,""); for(var i = 0; i < NoSp

大家好,我想创建一个函数,它接收字符串并返回一个对象,该对象具有字符串中字母频率的映射。此外,我希望我的函数返回按频率降序排序的对象。所以我期望的是letterfreqssabb=>{b:3,s:2,a:1}。我写了一个函数,返回频率映射,这个函数是

function letterfreq(str) { 
  var mapping = {};
  var NoSpaceStr = str.replace(/[\s]/g,"");
      for(var i = 0; i < NoSpaceStr.length; i++){
        if(!mapping[NoSpaceStr[i]])
            {mapping[NoSpaceStr[i]] = 0;}
        mapping[NoSpaceStr[i]] += 1;} 
   return mapping
}

问题是我对基于属性值的排序有点困惑。我退房了,第一个回答的投票率很高。他将对象做成一个数组,然后继续说,一旦你有了数组,你就可以按照你喜欢的顺序从数组中重建对象,从而实现你想要做的事情。我不知道该怎么做。我想知道是否有初学者能理解的解决方案。在我发布的链接中,这个问题的答案有点让人难以接受。任何建议或帮助都会很好。谢谢顺便说一句,这是CoderByte问题的一部分。

请检查这一点,因为您无法对对象进行排序,所以我们将对象转换为数组

function charOccour(str) {
    //returns object detailing characters and its count found in str
    //case sensitive
    var found = {}; //key is char found, and value is count of occourances in str
    for (var i=0; i<str.length; i++) {
        console.log('on char = ', str[i]);
        if(str[i] in found) {
            unique = false;
            found[str[i]]++;
        } else {
            found[str[i]] = 1;
        }
    }
    return found;
}

var ret = charOccour('blah blah'); //Object { b: 2, l: 2, a: 2, h: 2,  : 1 }
//turn ret to array and sort it

var arr = [];
for (var letter in ret) {
  arr.push([letter, ret[letter]])
};
console.log(arr.toString());

arr.sort(function(a, b) {
  return a[1] < b[1];
});
//['b',2], ['l',2], ['a',2], ['h',2], [' ',1]

对象在内部是哈希映射,不能排序。如何将其转换回哈希表?可以,但顺序不再保证。