JS算法(一)求出数组、字符串中第一个只出现一次的索引及数组、字符串转换方法

这篇博客介绍了如何在JavaScript中找到数组和字符串中第一个只出现一次的元素的索引,包括使用对象存储计数和转换方法。通过数组和字符串的转换,如split(), Array.from(), 扩展运算符和join(),来实现解题策略。" 115939747,10488363,Unity WebGL加载AssetBundle与Node.js服务器搭建,"['Unity3D', 'WebGL开发', 'Node.js', 'C#']
摘要由CSDN通过智能技术生成

1. 数组中第一个只出现一次的字母

这种解法使用的是对象的方法,通过把数组中的数值存入对象中,与其出现的次数形成键值对。用obj[ ]方法获取索引值,进行判断,即可。不过这个解法对于字符串就不管用了。

//取a-z字符串中第一个只出现一次的字母
function firstUniqueChar(arr){
    var obj={}, //存储每个字母出现的次数 字母:次数
        len=arr.length;
        
    for(var i=0;i<len;i++){
        if(obj[arr[i]]){
            obj[arr[i]]++;  //存在次数+1
        } else     {    
            obj[arr[i]] = 1; //不存在插入且次数=1
        }
    }    
    
    for(var prop in obj){
        if(obj[prop] == 1 ) return prop; //返回第一个次数等于1的元素
    }
}

2. 字符串中第一个只出现一次的字母

这个方法通过split()将字符串转换为了数组形式,使用了三目运算符进行判断,利用对象方法求出索引值。把每个索引值为1的索引都加入arr1,最后返回arr[0].也就是第一个出现的索引。


var str = 'eerrtreefffp'
function fun(str){
    var arr=[],arr1=[],obj={}
    arr=str.split('')
    for(var i=0;i<arr.length;i++){
        !obj[arr[i]] ? obj[arr[i]]=1 : obj[arr[i]]++
    }
    for(var i in obj){
        if(obj[i]==1){
            arr1.push(i)
        }
    }
    console.log(arr1[0])
}
fun(str)

参考:https://blog.csdn.net/weixin_42203283/article/details/104895133

3. 小方法

1.字符串转数组的方法

1. 通过 str.split(’’)

let str = 'sdhaishiohfidf'
s = str.split('')
console.log(s)

/*[
  's', 'd', 'h', 'a',
  'i', 's', 'h', 'i',
  'o', 'h', 'f', 'i',
  'd', 'f'
]*/

2. 通过Array.from(str);

let str = 'absckdf'
s = Array.from(str)
console.log(s)

/*[
  'a', 'b', 's',
  'c', 'k', 'd',
  'f'
]*/

3. 通过扩展运算符(…)

(注意:扩展运算符不能展开对象,在JSX中的{…}是表示将大括号里的语句翻译为JS语句,而不是展开运算符)

let str = 'chiskak'
s = [...str]
console.log(s)


/*[
  'c', 'h', 'i',
  's', 'k', 'a',
  'k'
]*/

4 .通过slice()

let str = 'dsfsfak'
s = Array.prototype.slice.call(str); 
console.log(s)

2.数组转字符串的方法

1. toString() 、toLocalString()

var a = [2,3,5,6,7,0];  //定义数组
var s = a.toString();  //把数组转换为字符串
console.log(s);     //2,3,5,6,7,0

2. join()

var a = [1,6,5,6,7,9];  //定义数组
var s = a.join(',');  //把数组转换为字符串
console.log(s);     //1,6,5,6,7,9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值