Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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_String_Object - Fatal编程技术网

Javascript 对对象元素进行排序并打印出字符串

Javascript 对对象元素进行排序并打印出字符串,javascript,string,object,Javascript,String,Object,我有一个函数,它返回一个对象,其中包含字符串中每个字符的所有匹配项 function count(str){ var arr = {}, i = str.length, j; while( i-- ){ j = arr[str[i]]; if(arr[str[i]] = j){ arr[str[i]] = j+1; } else arr[str[i]] = 1; } return arr; } console.l

我有一个函数,它返回一个对象,其中包含字符串中每个字符的所有匹配项

function count(str){
  var arr = {},
      i = str.length,
      j;
  while( i-- ){
    j = arr[str[i]];
    if(arr[str[i]] = j){
      arr[str[i]] = j+1;
    }
    else arr[str[i]] = 1;
  }
  return arr;
}
console.log(count("ra ta ta ratata"));
返回的值是{a:6,t:4,r:2,:3} 如何组合这些值以返回一个字符串,该字符串包含按出现次数排序的字符 它应该返回“aaaaaattttttrr”

类似这样的内容

var o = {a: 6, t: 4, r: 2, z : 3},
    letters = Object.keys(o).sort(function (a, b) {
        return o[b] - o[a];
    }).reduce(function (s, key) {
        return s += Array(o[key] + 1).join(key);
    }, '');

console.log(letters); //aaaaaattttzzzrr
请注意,
Object.keys
可能不受支持,但您可以为其使用垫片,或通过执行以下操作来简单地收集关键点:

var keys = [], k;

for (k in obj) {
    if (obj.hasOwnProperty(k)) {
        keys.push(k);
    }
}

所以再做一个循环!听起来像是家庭作业。
if(arr[str[i]]=j){
arr[str[i]
设置为
j
并返回
j
的布尔值。这也没有任何作用,因为
j
刚刚设置为
arr[i]
,所以您没有任何东西可以在它们之间进行比较。我认为返回值实际上应该是“at r”@ArunPJohny:这将按字符值排序,而不是发生次数。是不是
数组(o[key])
假设为
数组(o[key]+1)
?@Vatev,是的,抱歉,修复了!