给出一个字符串,找出第一个只出现一次的字符。
对于 aabc
, b
为第一个只出现一次的字符.
对于 abaccdeff
, b
为第一个只出现一次的字符.
可以用对象保存字符出现的次数。
const firstUniqChar = function(str) {};
const firstUniqChar = function(str) {
str = [...str];
let num = str.length; // 保存遍历次数
let obj = {}; // 保存被删元素
for (let i = 0; i < num; i++) {
let item = str.splice(0, 1)[0]; // 删除第一个值
if (str.indexOf(item) === -1 && obj[item] === undefined) {
// 当前数组中没有 并且对象中也没有
return item; // 找到
} else {
obj[item] = item; // 出现的字符串,用对象保存起来。
}
}
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
indexOf
的第二个参数,省了一步删除的操作。const firstUniqChar = function(str) {
str = [...str];
let obj = {};
for (let [index, key] of str.entries()) {
if (str.indexOf(key, index + 1) === -1 && obj[key] === undefined) {
// 跳过这个元素,当后面没有 并且前面也没有
return key; // 找到
} else {
obj[key] = key; // 前面出现过 存起来
}
}
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
const firstUniqChar = function(str) {
var obj = {}; // 用对象
for (var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
// 记录出现的次数
if (obj[code] == undefined) {
obj[code] = 1;
} else {
obj[code]++;
}
}
for (var i = 0; i < str.length; i++) {
// 遍历字符串出现的顺序(保证第一次出现重复),当出现为1时,即找到
if (obj[str.charCodeAt(i)] == 1) {
return str.charAt(i);
}
}
return null;
};
觉得还不错的话,给我的项目点个star吧
本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!