Javascript 从出现两次以上的字符串中删除字符
我想删除字符串中第三个出现的字符 以下是我从我这边开始的尝试:Javascript 从出现两次以上的字符串中删除字符,javascript,jquery,Javascript,Jquery,我想删除字符串中第三个出现的字符 以下是我从我这边开始的尝试: function unique(list) { var result = []; function findOccurrences(arr, val) { var i, j, count = 0; for (i = 0, j = arr.length; i < j; i++) { (arr[i] === val) &&
function unique(list) {
var result = [];
function findOccurrences(arr, val) {
var i, j,
count = 0;
for (i = 0, j = arr.length; i < j; i++) {
(arr[i] === val) && count++;
}
return count;
}
$.each(list, function(i, e) {
if (findOccurrences(list, e) < 3) result.push(e);
});
return result.join("");
}
var srting = "DGHKHHNL";
var thelist = srting.split("")
console.log(unique(thelist));
功能唯一(列表){
var结果=[];
函数findOccurrences(arr、val){
var i,j,
计数=0;
对于(i=0,j=arr.length;i
以下是一些预期结果:
输入:DGHKHHL
预期:DGHKHNL
输入:AFKLABAYBIB
预期:阿夫克拉比比
输入:jnnknnd
预期:JNNKD
。。我也尝试使用这个正则表达式来解决这个问题。但这并不能解决问题
请帮助您应该检查正在评估的特定索引的发生次数,而不是计算发生次数。基本上,如果它是第三次或更多次出现,那么你不想要它 对代码稍作更改即可实现此目的(您可能希望选择更好的函数名):
功能唯一(列表){
var结果=[];
函数findOccurrenceIndex(arr、val、index){
var i,j,
计数=0;
对于(i=0,j=arr.length;i
请注意,这个答案基于您当前的代码,我希望您可以重构逻辑以减少代码混乱 事实上,下面将代码简化为一个循环。它通过在列表中运行时构建字符计数字典来工作。(它也不像您最初的尝试那样依赖JQuery):
功能唯一(列表){
var结果=[];
变量计数={};
对于(变量i=0;i
一种不依赖jQuery的替代方法(尽管您可以轻松地用forEach交换):
这里我使用了两个助手数组
result
和tempCount
tempCount
是将每个字母表存储为键并计数,因此如果超过3
function unique(list) {
var result = [];
var tempCount = [];
list = list.split("");
for(var i=0;i < list.length;i++) {
if(tempCount[list[i]]) {
if(tempCount[list[i]] == 2) continue;
tempCount[list[i]]++;
} else {
tempCount[list[i]] = 1;
}
result.push(list[i]);
}
return result.join("");
}
var srting = "JNNNKNND";
console.log(unique(srting));
功能唯一(列表){
var结果=[];
var tempCount=[];
list=list.split(“”);
对于(变量i=0;i
根据@musefan的答案,另一种ES6方法可以使用数组。reduce
基于累加器对象构建计数/输出:
constonlytwo=list=>list.split(“”).reduce((缓存,字母)=>{
缓存[字母]?缓存[字母]+:缓存[字母]=1;
if(cache[letter]<3)cache.output+=letter;
返回缓存;
}, {
输出:“”
}).产出;
log(仅两个('dghkhnl'));
console.log(仅两个('AFKLABAYBIB'));
log(仅两个('jnnknnd'))代码>非常感谢您的帮助。正是我想要的wanted@SharmisthaKhound:不用担心,如果您感兴趣,我已经添加了另一种方法。其他人已经提供了解决方案,但请注意如何使用regex。正则表达式引擎允许可变宽度lookbehinds的语言可以解决这个问题,但javascript正则表达式不允许,所以不能单独使用正则表达式。
function unique(list) {
var result = [];
var counts = {};
for (var i = 0; i < list.length; i++) {
var c = list[i];
if (!counts[c])
counts[c] = 0;
counts[c]++;
if (counts[c] < 3) {
result.push(c);
}
}
return result.join("");
}
function unique(str) {
var count = {}
return str.split("").reduce((acc, cur) => {
if (!(cur in count)) {
count[cur] = 1;
acc.push(cur);
return acc;
}
if (count[cur] == 2) return acc;
acc.push(cur);
count[cur]++;
return acc;
}, []).join("");
}
function unique(list) {
var result = [];
var tempCount = [];
list = list.split("");
for(var i=0;i < list.length;i++) {
if(tempCount[list[i]]) {
if(tempCount[list[i]] == 2) continue;
tempCount[list[i]]++;
} else {
tempCount[list[i]] = 1;
}
result.push(list[i]);
}
return result.join("");
}
var srting = "JNNNKNND";
console.log(unique(srting));