(转载至慕课网)

原文链接:https://www.imooc.com/article/46933

github地址:https://github.com/dorseysen/notes-about-javascript-methods/blob/master/about-string-and-array.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//数组字符串操作的常见方法:
//这次呢先这么多,基本常见的都在这了
/**
* 1、split : 将字符串转化为数组 (单词译为:使分离)
* 2、join : 数组重组为字符串 (单词译为:连接)
* 3、reserve : 数组里所有元素顺序倒置 (单词译为:储备)
* 4、slice :数组或字符串片断截取 (单词译为:切片)
* 5、splice : 数组增删元素 (单词译为:拼接)
* 6、sort : 数组元素排序 (单词译为:分类)
* 7、concat :用于连接两个或多个数组 (单词译为:合并多个数组或字符串,联结)
* 8、shift :删除原数组中的第一项,并返回删除元素的值
* 9、unshift : 将参数添加到原数组开头 (shift和unshift这两个其实比较鸡肋,且存在着低版本如ie6返回值不准确问题)
* 10、push : 比较常见的方法,用于在数组末尾添加元素 (单词译为:堆栈)
* */
//1、split(reg); //把字符串转换为数组,传入的参数是一个匹配单元,字符串会根据这个匹配单元把字符串切割成一份份并形成一个数组
let str0 = "my name is dorsey!";
console.log(str0.split(''));// ['m','y',' ','n','a','m','e',' ','i','s',' ','d','o','r','s','e','y','!'];注意的是空格也是字符
console.log(str0.split(' ')); //["my","name","is","dorsey!"]
//2、join(reg);//相对于上面的拆,这里是重组,即把数组重新连接成字符串,原理一致,参数也是一个匹配单元,需注意的是join是数组的一个属性
let arr0 = ["my","name","is","dorsey!"];
console.log(arr0.join('-')); //传入“-”连接符号 my-name-is-dorsey!
console.log(arr0.join(' ')); //传入“ ”空格连接符 my name is dorsey! 空格也是符号,空格灾难地狱也是因为程序员的粗心导致的
//3、reverse(); 数组的一个对象,作用是将数组中的元素倒置
let arr1 = ["my","name","is","dorsey!"];
console.log(arr1.reverse());["dorsey!","is","name","my"]; //倒过来
// 1-2-3上面综合小案例
let str1 = "我是一名中国人!";
console.log(str1.split('').reverse().join(''));
//4、slice(start,end); 字符串或数组切取,截取
let str2 = "my name is dorsey!";
console.log(str2.slice(3,7)); //截取这段字符串中的第4~第7 即4,5,6,7这几个字符
let arr2 = ["my","name","is","dorsey!"];
console.log(arr2.slice(1, 3)); //也可以用于数组,切取是数组的第2~3个元素
//5、splice(index,howmany,item1,item2...):数组增删元素,后面的item是要添加的项目,并从index位置开始添加,index是从哪开始删除,howmany是要删除的个数
let str3 = ["my","name","is","dorsey!"];
str3.splice(2,2); //从str3[2]开始删除,删除2个,即"is" 和 "dorsey!"
console.log(str3);//["my","name"]
let arr3 = ["my","name","is","dorsey!"];
arr3.splice(2,0,2);//只添加项目就设置howmany值为零,这样它就删除0个,只添加
console.log(arr3);//["my","name",2,"is","dorsey!"];
//6、sort():对数组元素进行排序,注意这里的是以ASCLL码表做排序,且比对的是字符串的形式,比如415跟6,415会让4跟6比对,4在前,所以415比6前
let arr4 = [1,2,6,3,'b','baoh',457,712,41,62,"a","A",''];
//比如这里的A是排在65,a是排在97,而0~9的ascll码序号则是是从48开始到57结束,所以数字排在字母之前,而之所以是根据这个表是因为C语言而来的
arr4.sort();
console.log(arr4);//[1, 2, 3, 312, 41, 457, 6, 62, "A", "a"]
//准确的说是Unicode码,即在ascll码的基础上拓展了一些新字符,比如汉字的二进制存储,这里可以不用管,不知道为什么A排在a之前的可以去查一查
//这样的sort虽然具备拓展性和通用性,但显然不是我们想要的,比如我的数组只有数字,我只要数字从小到大排序就好,怎么做呢?两个字,传参数
let arr5 = [1,25,10,7,100,2560,13,-3281,-23,0];
function mun1(a,b){
return a-b;
}
console.log(arr5.sort(mun1));
//7、concat():合并多个数组,既可以几个数组来,也可以直接传一个字符串,会被当成数组的一个
let arr6 = ["my","name","is","dorsey!"];
let arr7 = ["I'm","from","China.",["你好啊","hello"]]; //这里数组里放数组我只是需要让你直观的确认concat实际上只处理了两层,但够了。
console.log(arr6.concat(arr7)); //["my", "name", "is", "dorsey!", "I'm", "from", "China."];
console.log(arr6.concat('dahids')); //["my", "name", "is", "dorsey!", "dahids"]
//8、shift():删除数组第一项的值,返回删除元素的值
let arr8 = ["my","name","is","dorsey!"];
console.log(arr8.shift()); //my
console.log(arr8); //["name", "is", "dorsey!"]
//9、unshift():将参数添加到原数组开头,且返回新数组的长度,注意的是部分浏览器返回结果有误,如ie6还有firefox2.0
let arr9 = ["my","name","is","dorsey!"];
arr9.unshift('呵呵!', 'hello');
console.log(arr9);
//10、push():将参数添加到原数组末尾,比较常用
let arr10 = ["my","name","is","dorsey!"];
arr10.push('呵呵!', 'hello');
console.log(arr10);
//1、split函数内部实现,join函数实现实际上是差不多的
//实际上它的内部应该是这样实现的:为了简化函数及方便理解,而split是作为一个属性存在于String这个对象里,
//这里咱只是把要切成数组的字符串当参数传进来,为了方便直观我就不封在数组对象里了,一样的其实
//另外呢,由于我也没看过底层源码是怎样的,实际上肯定有更高级巧妙的方式,特别这个while()函数最好少用,不过整体思路应该差不多,下同
let Split = function(string,str){
let rule = new RegExp(str),
accept = [], //
str0 = string; //为了不影响原字符串,缓存一下
//这里的切取一般得是用C/C++的for循环一个个字符去遍历,这里直接用了slice,只是大致看看里面是怎么走的
while(1){
if(rule.test(str0) && str !== ''){
accept.push(str0.slice(0,str0.indexOf(str)));
str0 = str0.slice((str0.indexOf(str)+str.length),str0.length);
}
else {
if(str === '' ) {
for(let i = 0; i < str0.length; i ++ ){
accept.push(str0[i]);
}
break;
}
else{
accept.push(str0);break;
}
}
}
return accept;
}
console.log(Split(str0,''));
console.log(str0.split(''));
//3、函数reverse内部实现,实际上应该是有更好的办法的,这里我们了解下原理即可
let Reverse = function(arr){
let accept = [];
for(let i = 0;i < arr.length;i++){
accept[i] = arr[arr.length-1-i];
}
return accept;
}
console.log(Reverse(arr2));
console.log(arr2.reverse());
//4、slice函数内部实现:为了方便直观我就不封在数组或字符串对象里了,一样的其实
let Slice = function(start,end,val){
let accept;
if(typeof(val) === "string"){
accept = '';
for(let i = start;i < (end > val.length ? val.length : end ); i++){
accept += val[i];
}
}
else {
let j = 0;
accept = [];
for(let i = start;i < (end > val.length ? val.length : end ); i++){
accept[j] = val[i];
j++;
}
}
return accept;
}
console.log(Slice(3, 100, str2));
console.log(str2.slice(3, 100));
console.log(Slice(2, 8, arr2))
console.log(arr2.slice(2, 8));
//6、sort方法实现:为了方便直观我就不封在数组对象里了,一样的其实,从它的实际应用来看应该内部逻辑很复杂,为了简化,我们
//只考虑了纯数字的排序,也不考虑用函数作为参数来传参,咱考虑正序和逆序即可
//注意!注意!注意!这里的排序只对数字有效
let Sort = function(arr,order){ //order只有StoL和LtoS,StoL代表正序(小-大),LtoS代表倒序(大-小)
let accept = arr,mid;
if(accept.length > 1){
for(let i = 1; i < accept.length; i ++ ){
for(let j = 0; j < i; j ++ ){
if((accept[i] < accept[j] && order === 'StoL') || (accept[i] > accept[j] && order === 'LtoS')){ //满足条件则交换位置
mid = accept[i]; //这里如果是纯number类型的,可以不用新增寄存器(变量mid)
accept[i] = accept[j];
accept[j] = mid; // mid中间值
}
}
}
}
return accept;
}
// //基本sort排序
let sortTest = [1,25,10,7,100,2560,13,-3281,-23,0];
console.log(Sort(sortTest,'LtoS'));
//7、concat方法实现:为了方便直观我就不封在数组对象里了,一样的其实
let Concat = function(){
let accept = [];
for(let i = 0; i < arguments.length; i ++){
if(typeof (arguments[i]) !== "string"){
for(let j = 0; j < arguments[i].length; j++){
accept.push(arguments[i][j]);
}
}
else {
accept.push(arguments[i]);
}
}
return accept;
}
console.log(Concat(arr6, 'dasoai','dsaoidha','我去你妹的')); //两者输出结果一致
console.log(arr6.concat('dasoai','dsaoidha','我去你妹的')); //["my", "name", "is", "dorsey!", "dasoai", "dsaoidha", "我去你妹的"]
//8、shift方法实现 :删除数组第一个元素
let Shift = function(arr){
let firstVal = arr[0];
for(let i = 0; i < arr.length-1; i++){
arr[i] = arr[i + 1];
}
arr.length -=1;
return firstVal;
}
let shiftTest = [1,25,10,7,100,2560,13,-3281,-23,0];
console.log(Shift(shiftTest)); //返回第一个元素
console.log(shiftTest); //删除了第一个元素的数组
//9、unshift方法实现 : 将参数添加到数组开头
let Unshift = function(arr){
arr.length += arguments.length-1;
for(let i = arr.length;i > arguments.length-1; i --){
arr[i-1] = arr[i-arguments.length];
}
for(let i = 0 ; i < arguments.length-1 ; i ++){
arr[i] = arguments[i+1];
}
return arr.length;
}
let unshiftTest = [1,25,10,7,100,2560,13,-3281,-23,0];
console.log(Unshift(unshiftTest,"hello","world")); //返回新数组长度12
console.log(unshiftTest); //返回新数组
//10、push方法实现 : 将参数添加到数组末尾,与unshift的原理实质上是一致的
let Push = function(arr){
arr.length += arguments.length - 1;
for(let i = 1; i < arguments.length ; i ++){
arr[arr.length - arguments.length + i] = arguments[i];
}
return arr.length;
}
let pushTest = [1,25,10,7,100,2560,13,-3281,-23,0];
console.log(Push(pushTest,"hello","world")); //返回新数组长度12
console.log(pushTest); //返回新数组
</script>
</body>
</html>

javascript常见方法汇总之一——数组字符串相关的更多相关文章

  1. 每天一个JavaScript实例-递归实现反转数组字符串

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. javascript 常见的面试题---数组 &amp;&amp; 算法

    网上汇总而来的题目. 第一题: 用 JavaScript 写一个函数,输入 int 型(正整数),返回整数逆序后的字符串.如:输入整型 1234,返回字符串“4321”. 要求必须使用递归函数调用,不 ...

  3. Javascript:splice()方法实现对数组元素的插入、删除、替换及去重

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法: Array.prototype.splice(index,count[,el ...

  4. JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理

    壹 ❀ 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但 ...

  5. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  6. javascript 常见方法记录

    1,trim():去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写. <script langu ...

  7. JS数组方法汇总 array数组元素的添加和删除

    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...

  8. C#加密方法汇总(SHA1加密字符串,MD5加密字符串,可逆加密等)

    using System;using System.Collections.Generic;using System.Text; namespace StringEncry{ class Encode ...

  9. java将前端的json数组字符串转换为列表

    记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表. 前端数据转化与请求 var contracts = [ {id: '1', name: 'yanggb合同1'}, {i ...

随机推荐

  1. Python图片处理

    Python图像处理库PIL基本使用 #将图片转换为灰度图像 from PIL import Image pil_im = Image.open('cat.jpg') gray_cat = pil_i ...

  2. BZOJ 3624 免费道路

    第一反应:这不先0后1做并查集就行了吗? 然后WA了... 哦....啊?哦...233 如果按顺序做并查集,有些0的边可能很重要(只能由它作为0连起两个联通块),但并没有被选. 于是先按1做并查集, ...

  3. JFreeChart的使用(转)

    前提:导入需要的2个jar文件,jcommon-版本号.jar,jfreechart-版本号.jar.可以去官网下载:http://sourceforge.net/projects/jfreechar ...

  4. GitHub创建仓库,并与git本地仓库关联

    登录后头像右上角点击: 起名再create 后 会跳转到下面页面: 先在git上复制执行第一条指令,创建一个readme文档 然后再用第二条初始化仓库 第三步将readme文档添加至暂存区 然后提交一 ...

  5. 【独家】硅谷创业公司在中国常跌的五个坑|禾赛科技CEO李一帆柏林亚太周主题演讲

    [独家]硅谷创业公司在中国常跌的五个坑|禾赛科技CEO李一帆柏林亚太周主题演讲 李一帆 Xtecher特稿作者 关注  Xtecher推荐   演讲者:李一帆   翻译:晓娜   网址:www.xt ...

  6. Linux环境变量设置/etc/profile、/etc/bashrc、~/.profile、~/.bashrc区别

    登入系统读取步骤: 当登入系统时候获得一个shell进程时,其读取环境设定档有三步 : 1.首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/p ...

  7. Java学习(一)--面向对象(一)

    面向对象的思想一直指导者我们软件的分析.设计与开发.java语言是一种面向对象的语言.在学习java之前,先回想一以下向过程和面向对象. 一面向过程 面向过程主张按功能来划分系统需求.每一个功能都负责 ...

  8. POWER BI报表服务器混合云初了解

    Power BI报表服务器 购买Power BI Premium时,你可以获取2个产品,一个是Power BI Service另外一个是Power BI Report Server. Power BI ...

  9. RPC和RabbitMQ

    在单台机器或者单个进程中,如果要调用某个函数,只需要通过函数指针,传入相关参数,即可调用成功并获得结果.但如果是在分布式系统中,某个进程想要调用远程机器上的其它进程提供的方法(服务),就需要采用RPC ...

  10. MySQL 日志功能详解

    MySQL日志分类 1:查询日志 :query log     2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志     3:错误日志:error log   ...