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,是的,抱歉,修复了!