javascript中数组和字符串的计比较

前面的口舌

  字符串和数组有成百上千的相同之处,它们的法子众多,且互相似度很高;但她而出不同之处,字符串是不行变值,于是可以拿该看做只念的数组。本文将对准字符串和频繁组的接近方式进行比

 

可索引

  ECMAScript5定义了一致栽访问字符的艺术,使用方括号加数字索引来访问字符串中之一定字符

  可索引的字符串的无比充分之补就是简单,用方括号代替了charAt()调用,这样更简洁、可读而可能又快速。不仅如此,字符串的行为看似于数组的实际令通用的数组方法可以及字符串上

  如果参数超出范围或是NaN时,则输出undefined

var str = "hello";
console.log(str[0]);//h
console.log(str[[1]]);//e

console.log(str[false]);//undefined
console.log(str[-1]);//undefined
console.log(str[NaN]);//undefined
console.log(str[]);//报错

var arr = ['h','e','l','l','o'];
console.log(arr[0]);//h
console.log(arr[[1]]);//e

console.log(arr[false]);//undefined
console.log(arr[-1]);//undefined
console.log(arr[NaN]);//undefined
console.log(arr[]);//报错

 

转换

  字符串可以应用split()方法变为数组;而数组可以采用join()方法换为字符串

【split()】

  split()方法基于指定的相间符将一个字符串分割成多只字符串,并以结果在一个数组中,分隔符可以是字符串,也可以是一个正则表达式

  该方法好承受(可选的)第二只参数用于指定数组的深浅。如果第二个参数为0-array.length范围外的价值时,按照指定参数输出,其他情况将兼具结果都输出

  若指定分隔符没有起在字符串中,则以数组的款式返回原字符串的值

var colorText = 'red,blue,green,yellow';
console.log(colorText.split(''));//["r", "e", "d", ",", "b", "l", "u", "e", ",", "g", "r", "e", "e", "n", ",", "y", "e", "l", "l", "o", "w"]
console.log(colorText.split(','));//["red", "blue", "green", "yellow"]
console.log(colorText.split(',',2));//["red", "blue"]
console.log(colorText.split(',',6));//["red", "blue", "green", "yellow"]
console.log(colorText.split('-'));//["red,blue,green,yellow"]
console.log(colorText.split(/\,/));//["red", "blue", "green", "yellow"]
console.log(colorText.split(/e/));//["r", "d,blu", ",gr", "", "n,y", "llow"]
console.log(colorText.split(/[^\,]+/));//将除去逗号以外的字符串变为分隔符["", ",", ",", ",", ""],IE8-会识别为[",",",",","]

【join()】

  join()方法好用不同的隔符来构建这个字符串,join()方法就接到一个参数,用作分隔符的字符串,然后回到包含所有数组项的字符串

  如果无受join()方法传入任何价值,则使用逗号作为分隔符

var a = [1,2,3];
console.log(a.join());//'1,2,3'
console.log(a.join(' '));//'1 2 3'
console.log(a.join(''));//'123'

var b = new Array(10);
b.join('-');//'---------',9个连字符组成的字符串

  如果数组中之某平码的值是null或者undefined,则该值在join()方法返回的结果受盖空字符串代表

var colors = [1,undefined,2,null,3];
console.log(colors.join());//'1,,2,,3'

  由于字符串是类数组对象,所以,也足以利用join()方法

console.log(Array.prototype.join.call('hello', '-'));// "h-e-l-l-o"

var str = 'test';
var arr = str.split('')//["t", "e", "s", "t"]
console.log(arr.join('-'));//'t-e-s-t'

 

拼接

  字符串和数组共同拥有拼接方法concat()

var value = 'hello';
console.log(value.concat('world'));//'helloworld'
console.log(value.concat(['world']));//'helloworld'
console.log(value.concat([['world']]));//'helloworld'

var value = ['hello'];
console.log(value.concat('world'));//["hello", "world"]
console.log(value.concat(['world']));//["hello", "world"]
console.log(value.concat([['world']]));//["hello", ["world"]]

 

创建

  字符串和数组都抱有创建方法slice(),分别用于创造子字符串和子数组

  slice()方法基于当前数组(或字符串)中之一个或多独宗创建一个初数组(或字符串),接受一个要少数只参数,即如回到项的苗子与竣工位置,最后回到新数组(或字符串)

  slice(start,end)方法需要少只参数start和end,返回这个数组(或字符串)中打start位置及(但非含)end位置的一个子数组(或字符串);如果end为undefined或未设有,则回从start位置到数组(或字符串)结尾的装有项

  如果start是负数,则start = max(length + start,0)

  如果end是负数,则end = max(length + end,0)

  start和end无法交换位置

var numbers = [1,2,3,4,5];
console.log(numbers.slice(2));//[3,4,5]
console.log(numbers.slice(2,undefined));//[3,4,5]
console.log(numbers.slice(2,3));//[3]
console.log(numbers.slice(2,1));//[]

console.log(numbers.slice(-3));//-3+5=2 -> [3,4,5]
console.log(numbers.slice(-8));//max(5 + -8,0)=0 -> [1,2,3,4,5]

console.log(numbers.slice(0,-3));//-3+5=2 -> [1,2]
console.log(numbers.slice(-2,-1));//-2+5=3;-1+5=4; -> [4]

var stringValue = 'hello world';
console.log(stringValue.slice());//'hello world'
console.log(stringValue.slice(2));//'llo world'
console.log(stringValue.slice(20));//''
console.log(stringValue.slice(2,undefined));//'llo world'

console.log(stringValue.slice(2,-5));//'llo '
console.log(stringValue.slice(2,-20));//''
console.log(stringValue.slice(-2,2));//''
console.log(stringValue.slice(-2,-20));//''            
console.log(stringValue.slice(-2,20));//'ld'
console.log(stringValue.slice(-20,2));//'he'
console.log(stringValue.slice(-20,-2));//'hello wor'

 

位置

  字符串和数组都有着查找位置的简单个措施:indexOf()和lastIndexOf()。位置方法与中括号[]读取方法正好相反,一个凡经过项查找索引,一个是透过索引查找项

【indexOf()】

  indexOf(search,start)方法接收search和start两单参数,返回search首不好面世的岗位,如果无找到则归-1

  字符串中之search参数会调用String()转型函数,将该参数的非字符串值转换为字符串;而数组中之search参数则用严格等运算符(===)进行较

  不论是数组还是字符串,第二个参数start都见面隐式调用Number()转型函数,将start非数字值(undefined除外)转换为数值;若忽略该参数或欠参数为undefined、NaN时,start
= 0

  若start参数为负数,字符串的拍卖是以start=0;而频繁组的拍卖是start =
max(0,start+length)

var string = 'hello world world';
console.log(string.indexOf('ld'));//9
console.log(string.indexOf('ld',undefined));//9
console.log(string.indexOf('ld',NaN));//9
console.log(string.indexOf('ld',-1));//9
console.log(string.indexOf('ld',10));//15
console.log(string.indexOf('ld',[10]));//15
console.log(string.indexOf('true',[10]));//-1
console.log(string.indexOf(false,[10]));//-1

var arr = ['a','b','c','d','e','a','b'];
console.log(arr.indexOf('a',undefined));//0
console.log(arr.indexOf('a',NaN));//0
console.log(arr.indexOf('a',1));//5
console.log(arr.indexOf('a',true));//5
console.log(arr.indexOf('a',-1));//max(0,-1+7)=6; -1
console.log(arr.indexOf('a',-5));//max(0,-5+7)=2; 5
console.log(arr.indexOf('a',-50));//max(0,-50+7)=0; 0

【lastIndexOf()】

  以及indexOf()方法相反,lastIndexOf()方法是从右边为左查找

  lastIndexOf(search,start)方法接收search和start两只参数,返回searchString第一破面世的位置,如果没找到则归-1

  类似地,字符串中的search参数会调用String()转型函数,将欠参数的非字符串值转换为字符串;而数组中的search参数则应用严格等运算符(===)进行比较

  不论是数组还是字符串,第二只参数start都见面隐式调用Number()转型函数,将start非数字值(undefined除外)转换为数值

  若忽略该参数或该参数为undefined、NaN时,字符串的拍卖是start = length

  • 1;而数组的处理是start = 0

  若start参数为负数,字符串的拍卖是拿start=0;而往往组的拍卖是start =
max(0,start+length)

var string = 'hello world world';
console.log(string.lastIndexOf('ld'));//15
console.log(string.lastIndexOf('ld',undefined));//15
console.log(string.lastIndexOf('ld',NaN));//15
console.log(string.lastIndexOf('ld',-1));//-1
console.log(string.lastIndexOf('h',-1));//0
console.log(string.lastIndexOf('w',undefined));//12

console.log(string.lastIndexOf('ld',10));//9
console.log(string.lastIndexOf('ld',[10]));//9
console.log(string.lastIndexOf('true',[10]));//-1
console.log(string.lastIndexOf(false,[10]));//-1

var arr = [1,2,3,'1','2','3'];
console.log(arr.lastIndexOf('2'));//4
console.log(arr.lastIndexOf(3));//2
console.log(arr.lastIndexOf(0));//-1

var arr = ['a','b','c','d','e','a','b'];
console.log(arr.lastIndexOf('b'));//6
console.log(arr.lastIndexOf('b',undefined));//-1
console.log(arr.lastIndexOf('a',undefined));//0
console.log(arr.lastIndexOf('b',NaN));//-1
console.log(arr.lastIndexOf('b',1));//1
console.log(arr.lastIndexOf('b',-1));//max(0,-1+7)=6; 6
console.log(arr.lastIndexOf('b',-5));//max(0,-5+7)=2; 1
console.log(arr.lastIndexOf('b',-50));//max(0,-50+7)=0; -1

 

顺序

【反转】

  在频繁组Array中在reverse()方法来反而转数组

var array = [1,2,4,3,5];
console.log(array,array.reverse());//[5,3,4,2,1] [5,3,4,2,1]

  而字符串String也得下call()或apply()来贯彻反转

var str = '12435';
console.log(str,Array.prototype.reverse.apply(str.split('')).join(''));//'12435' '53421'

【排序】

  在屡次组Array中在sort()方法ECMAScript来针对数组排序,默认按字符串升序排列数组项

var array = [1,2,4,3,5];
console.log(array,array.sort());//[1,2,3,4,5] [1,2,3,4,5]

  而字符串String也可以动用call()或apply()来实现排序

var str = '12435';
console.log(str,Array.prototype.sort.apply(str.split('')).join(''));//'12435' '12345'