我的目标是转向
['sara', 'mike', 'sara','sara','Jon']
进入
'sara', 'mike', 'sara(1)','sara(2)' 'Jon'
我在计算重复的总数时看到了一些解决方案,然而,无法找到我正在尝试做的事情。
PS。我不能使用sort(),因为名称应该保留在原始数组中的位置..
我尝试使用常规for循环,但没有真正有效,我也认为地图方法可能会很好,但无法弄清楚如何做到这一点。
谢谢!
编辑:
我实际上想出了这个:
function words(arr){
var result=[];
var count=0;
for (var i=0; i<arr.length; i++){
if (result.indexOf(arr[i])==-1){
result.push(arr[i]);
}
else {
count++;
result.push(arr[i]+"("+count+")");
}
}
return result.join(',');
}
words(['sara', 'mike', 'sara','sara','Jon'] );
它起作用,除了它返回sara,mike,sara(1),sara(2),Jon&#39;而不是&#39; sake&#39; mike,&#39; sara(1)&#39;,&#39; sara(2)&#39;,&#39; Jon&#39; ;
任何人都知道如何改变它?我已尝试加入,拆分等..
答案 0 :(得分:1)
var nameArr = ['sara', 'mike', 'sara','sara','Jon'];
var nameTrack = {};
var resultArr = nameArr.map(function(name) {
if(typeof nameTrack[name] === 'undefined') {
nameTrack[name] = 0;
return name;
}
return name + '(' + ++nameTrack[name] + ')';
});
一些解释点:
你不能在第4行使用nameTrack[name]
强制转换为布尔值,因为0是非真实的。
++
在nameTrack[name]
之前,以便首先发生增量。如果你之后加上它,那么数字只会在字符串形成后增加。
Map是一个数组函数,它接受数组的每个值,修改它,并将其返回给数组。见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
答案 1 :(得分:1)
试试这个:
function countWords (words) {
var wordsCounter = {}, results = [];
words.forEach(function (word) {
if (!wordsCounter.hasOwnProperty(word)) {
results.push(word);
wordsCounter[word] = 1;
}
else {
results.push(word + '(' + (wordsCounter[word]++) + ')');
}
});
return results;
}
答案 2 :(得分:0)
这是一个常规循环解决方案。测试并获得预期的结果
var myArray = ['sara', 'mike', 'sara','sara','Jon']
var arrayResult = [];
for (var i=0;i<myArray.length;i++)
{
arrayResult.push(countPlease(i));
}
console.dir(arrayResult);
//'sara', 'mike', 'sara(1)','sara(2)' 'Jon'
function countPlease(index)//index of where you're current at
{
//loop backword
var txt = myArray[index]; // don't count
var c = 0;
for (var i=index-1;i>-1;i--) //don't count itself
{
if(myArray[i]==txt)
{
c++
}
}
if(c>0)
{
return txt+ ' (' + c+')'
}
else
return txt;
}
答案 3 :(得分:0)
Here是一个JSFiddle,这是一个解决方案:
UPDATE news SET article_title="["+id+"]" + article_title;
答案 4 :(得分:0)
借助对象,对单词进行计数:
if(key in obj) { // Found the same word
...
obj[key] += 1;
} else { // Only one time found
...
obj[key] = 0;
}
总计:
var names = ['sara', 'mike', 'sara', 'sara', 'Jon'];
function countWords(arr) {
var res = [];
var obj = {};
names.forEach(function(name) {
if(name in obj) {
obj[name] += 1;
res.push(name + "(" + obj[name] + ")");
} else {
obj[name] = 0;
res.push(name);
}
});
return res.join(",");
}
var res = countWords(names);
console.log(res);
答案 5 :(得分:-2)
var arr = ['sara', 'mike', 'sara','sara','Jon'];
var number_detail = {};
$.each(arr, function(key, val){
if (typeof number_detail[val] != 'undefined'){
var cur_count = number_detail[val];
number_detail[val] = cur_count+1;
arr[key] = val+'('+number_detail[val]+')';
}
else {
number_detail[val] = 0;
}
});