const repeat= (nums) =>{ //* Done
let ans = []
for(let i = 0; i< nums.length; i ){
if(nums[i] === nums[i 1]){
if(ans[ans.length -1] !== nums[i]){
ans.push(nums[i])
}
}
}
return ans.length
}
console.log(repeat(['nsmg33de1','nsmg33de1','2211,','2211','1234','1234']))
在这个例子中,这个函式似乎无法正常作业,阵列中有 3 个重复的字符串,但它会输出 2
uj5u.com热心网友回复:
[我希望这会对您有所帮助,首先将给定的字符串转换为阵列。要做到这一点,请使用string.split("")
. 其次,创建一个将单词存盘为键并计数为值的映射。
现在遍历 stringArray 并将当前单词存盘到地图中。并在每次找到单词时增加单词的计数。
检查以下链接][1]
let words = "I am not gonna live forever, but I wanna live while I am alive";
function countRepeatedWords(sentence) {
let words = sentence.split(" ");
let wordMap = {};
for (let i = 0; i < words.length; i ) {
let currentWordCount = wordMap[words[i]];
let count = currentWordCount ? currentWordCount : 0;
wordMap[words[i]] = count 1;
}
return wordMap;
}
console.log(countRepeatedWords(words));
uj5u.com热心网友回复:
取决于你想要什么价值?如果您想要已发生的重复数量,您可以将您的串列转换为一个 Set 以洗掉所有重复,然后计算该集合与原始串列之间的大小差异,如下所示:
function repeat(values) {
return values.length - new Set(values).size;
}
否则,如果您想知道有多少项目至少有 1 个重复,那将是一个不同的故事。
为此,您可以将集合转换为阵列,然后在阵列中多次找到该值的每个值上映射 1,对所有其他值映射 0。之后,您可以通过将所有这些值加在一起来减少此阵列。像这样:
function repeat(values) {
return [...new Set(values)].map(v => values.filter(o => o == v).length > 1 ? 1 : 0).reduce((a, b) => a b);
}
uj5u.com热心网友回复:
我把它放在控制台中。不是世界上最好的算法,但我认为这就是你想要做的:
const getCountOfDuplicates = (items) => {
const count = {};
items.forEach(item => {
if(count[item] && count[item] > 0) {
count[item] ;
} else {
count[item] = 1;
}
});
return Object.values(count).reduce((acc, value) => {
if(value > 1) {
acc ;
}
return acc;
}, 0);
};
console.log('results 1', getCountOfDuplicates(['1','2','3','4','1','2','3','5', '6', '6', '7'])); // Output: "results 1", 4
console.log('results 2', getCountOfDuplicates(['nsmg33de1','nsmg33de1','2211,','2211','1234','1234'])) // Output: "results 2", 2
uj5u.com热心网友回复:
你的代码没问题。这个阵列有问题 ['nsmg33de1','nsmg33de1','2211,','2211','1234','1234'] 使用 ['nsmg33de1','nsmg33de1','2211','2211',' 1234','1234']
也试试这个原始代码
const arr = ['nsmg33de1','nsmg33de1','2211','2211','1234','1234']
let obj = {};
arr.forEach(x => {
obj[x] = (obj[x] || 0) 1;
});
console.log(obj);
let valArray =Object.values(obj);
let conunt = 0;
valArray.forEach( c => {
if(c > 1){
conunt = conunt 1;
}
});
console.log(conunt);
uj5u.com热心网友回复:
你的代码运行得很好。
洗掉,
串列中第 3 项末尾的逗号。
['nsmg33de1','nsmg33de1','2211,','2211','1234','1234']
结果:
['nsmg33de1','nsmg33de1','2211','2211','1234','1234']
const repeat = nums => { //* Done
let ans = []
for (let i = 0; i < nums.length; i ) {
if (nums[i] === nums[i 1]) {
if (ans[ans.length-1] !== nums[i]) {
ans.push(nums[i])
}
}
}
return ans.length
}
console.log(repeat(['nsmg33de1','nsmg33de1','2211','2211','1234','1234'])) // -> 3
如果单词不按顺序使用以下内容:
const getRepeatedWordsCount = list => {
let wordDict = {};
let total = 0;
for (let word of list) {
total = wordDict[word] ? 1 : 0;
wordDict[word] = 1;
}
return total;
}
console.log(getRepeatedWordsCount(['nsmg33de1','2211','1234','nsmg33de1','1234', '2211'])) // -> 3
0 评论