我有一系列物品。例如:
var classes = ['link', 'block', 'hide', 'link', 'menu', 'block', 'content', 'link', 'footer', 'img', 'img', 'link', 'modal', 'button', 'form', 'input', 'button', 'input', 'link', 'toString', 'valueOf', 'button'];
我需要获得一系列独特的项目,按频率排序:
'link'
项应该在第一位,因为数组包含它5次。
'button'
项应位于第二位,因为数组包含它3次。
等
["link", "button", "input", "img", "block", "footer", "content", "modal", "menu", "form", "hide", "toString", "valueOf"]
答案 0 :(得分:2)
您可以使用ECMAScript 5方法轻松获取它:
var classes = ['link', 'block', 'hide', 'link', 'menu', 'block', 'content', 'link', 'footer', 'img', 'img', 'link', 'modal', 'button', 'form', 'input', 'button', 'input', 'link', 'toString', 'valueOf', 'button'];
var frequency = classes.reduce(function(data, item) {
data[item] = -~data[item];
return data;
}, {});
var uniques = Object.keys(frequency).sort(function(a, b) {
return frequency[b] - frequency[a];
});
console.log(uniques);
如果您必须支持旧浏览器,您仍然可以使用shims。
答案 1 :(得分:1)
两个步骤:
{'item', 'frequency'}
对使用array.sort函数:
var arr = [{'item':'link', 'freq':4},{'item':'button', 'freq':2},{'item':'div', 'freq':5}];
arr.sort(function(a,b){return b.freq - a.freq});
答案 2 :(得分:1)
Underscore.js解决方案:
var dict = _.reduce(classes, function(memo, class) {
memo[class] = memo[class] ? memo[class] + 1 : 1
}, {});
var pairs = _.pairs(dict);
var sortedPairs = _.sort(pairs, function(pair) {
return pair[1];
});
var result = _.map(sortedPairs, function(pair) {
return pair[0];
});
答案 3 :(得分:1)
它应该是这样的。
var classes = [ 'link', 'block', 'hide',
'link', 'menu', 'block',
'content', 'link', 'footer',
'img', 'img', 'link', 'modal',
'button', 'form', 'input',
'button', 'input', 'link',
'toString', 'valueOf', 'button'];
var counter;
var i=0,z=0,x=0;
var bool = false;
while(!bool){
for(j=1;j<classes.length;j++)
{
if(( classes[i] == -1) || (classes[j] == -1))
{
i++;j++;
}
else if(classes[i] === classes[j])
{
classes[j] = -1;
counter = z + "," + (Number(x)+1);
}
x++;
}
i++;
z++;
if((classes.length-1) == i)
{
bool = true;
}
}
在结束计数计数器中的第二个变量(z,“x”)所以每次
实例Z的出现将是x
答案 4 :(得分:1)
尝试this,
var xArray= ["apple","cake","pie","pie","pie","apple"];
var xNew=[];
var temp;
for(var i=0;i<=xArray.length-1;i++)
{
if( xNew.indexOf(xArray[i]) === -1 )
{
xNew.push(xArray[i])
}
}
function occuranceOf(xStr)
{
var xCount =0;
for(var i=0; i<=xArray.length-1; i++)
{
if(xArray[i] === xStr)
{
xCount += 1;
}
}
return xCount;
}
for(var i=0;i<=xNew.length-1;i++)
{
for(var j=i+1; j<=xNew.length-1; j++)
{
if(occuranceOf(xNew[i]) < occuranceOf(xNew[j]))
{
temp = xNew[i];
xNew[i] = xNew[j];
xNew[j] = temp;
}
}
}
alert(xNew);
答案 5 :(得分:1)
怎么样:
var classes = ['link', 'block', 'hide', 'link', 'menu', 'block', 'content', 'link', 'footer', 'img', 'img', 'link', 'modal', 'button', 'form', 'input', 'button', 'input', 'link', 'toString', 'valueOf', 'button'],
frequency = {},
sortedClasses = [],
result = [];
for (var i in classes) {
var name = 'z' + classes[i];
frequency[name] = frequency[name] ? frequency[name] + 1 : 1;
}
for (var j in frequency) {
sortedClasses.push([j, frequency[j]]);
}
sortedClasses.sort(function (a, b) {
return b[1] - a[1];
});
for (var g in sortedClasses) {
var name = sortedClasses[g][0].substr(1);
result.push(name);
}
我以“z”为前缀,因为它们的名字如: “的valueOf”