在JavaScript中动态更新Map中的键值



我现在有一个函数下面找到第一个不重复的字母。例如,对于字符串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"));

最新更新