1

我有一系列标题(句子)。其中一些标题在整个数组中重复,例如我的数组是(为清晰起见缩短标题):

var arr = ['a','b', 'c', 'a', 'f', 'r', 'b', 'a'];

正如你所看到的,一些值重复了不止一次。我需要通过将计数器(从 1 开始)附加到第一个匹配项来重命名多个匹配项。所以最后我必须有:

'a', 'a1', 'a2', 'b', 'b1'

这意味着我需要为每个重复事件存储计数器。

我怎么能用 javascript/jquery 写这个?

4

2 回答 2

1

下面是一些伪代码,其中 tally 是标题计数映射(例如 {title:0}):

for (var i = 0; i < arr.length; i++) {
  if (arr.indexOf(arr[i]) != i) {
    tally[arr[i]]++;
    arr[i] = arr[i] + tally[arr[i]];
  }
}
于 2013-07-02T14:46:14.697 回答
0

语言无关算法

Add the elements of array to map so that no duplicate elements would be present and initialize it to 0.   
Iterate through array   
    Check if the elemnt is present in map             
    if present  then                                                                       
        map[element]++;
        element+value of element at map+1; 
    else element

例子:

var arr = ['a','b', 'c', 'a', 'f', 'r', 'b', 'a'];
//initialize the map
map m
m[a]=0;  m[b]=0;    m[c]=0;    m[f]=0;     m[r]=0;     

for(index=0 to size of array){
    if(m[arr[index]]){
        m[arr[index]]++;
        write arr[index] with m[arr[index]];
     }else{
         write arr[index];
     }
}

您可以使用此处提到的地图How to create a simple map using JavaScript/JQuery,然后我认为一切几乎相同。

于 2013-07-02T14:40:16.780 回答