我现在有一个函数下面找到第一个不重复的字母。例如,对于字符串carro
,该字母将是c
;对于字符串total
,该字母将是o
。我有下面的代码可以工作:
function findFirstNonrepeatedChar(str) {
const store = {};
const arr = str.split('');
arr.forEach(item => {
if(!store[item]) {
store[item] = 1;
} else {
store[item] = store[item] + 1;
}
})
for(let char in store) {
if(store[char] === 1) return char;
}
}
但是,现在我想使用Map而不仅仅是一个普通对象,并且我很难像下面这样更新重复单词的频率:
function findFirstNonrepeatedChar(str) {
const store = new Map();
const arr = str.split('');
arr.forEach(item => {
if(!store.has(item)) {
store.set(item, 1);
} else {
store[item]++;
}
})
console.log(store, 'store')
for(let char in store) {
if(store[char] === 1) return char;
}
}
这样做的最好方法是什么?
这里有两件事:
- 您的
set
保存键值要存储,使用get按键获取值store.set(item, (store.get(item) || 0) + 1);
- 你通过
for..of
迭代Map的键值对,而不是for..in
function findFirstNonrepeatedChar(str) {
const store = new Map();
const arr = str.split("");
arr.forEach((item) => {
store.set(item, (store.get(item) || 0) + 1);
});
for (let [char, occurrences] of store) {
if (occurrences === 1) {
return char;
}
}
}
console.log(findFirstNonrepeatedChar("carro"));
console.log(findFirstNonrepeatedChar("total"));
如果您对其他解决方案感兴趣,我将如何使用Array.prototype.find()
。
const findFirstNonrepeatedChar = (str) => str.split('').find(
(val) => str.match(new RegExp(val, 'g')).length === 1
);
console.log(findFirstNonrepeatedChar('total'));
console.log(findFirstNonrepeatedChar("carro"));
console.log(findFirstNonrepeatedChar("aabbcc"));