js数组和字符串对象常用方法总结

  总结下js中数组和字符串的常用方法。有几个方法总是记混,没办法,英语差,而且对于返回值和是否改变原数组也一直掌握不牢。

Array

array.concat(item…)

concant方法产生一个新数组,它包含一份array的浅复制(shallow copy)并把一个或多个参数item附加在其后。如果item是一个数组,那么它的每个元素会被分别添加。

1
2
3
4
5
var a = ['a','b','c'];
var b = ['x','y','z'];
var c = a.concat(b, true);
//c 变成 ['a','b','c','x','y','z',true]
//数组a 和 b不变

array.join(separator)

join方法把一个array构造成一个字符串——就是数组转字符串。它先把array中的每个元素构造成一个字符串,接着用一个separator分隔符把它们链接在一起。默认的separator是逗号’,’。要想做到无间隔的链接,可以使用空字符串作为separator。

1
2
3
4
5
6
7
var a = ['a','b','c'];
var b = a.join();
var c = a.join('');
var d = a.join(',');
//b和d都是'a,b,c'
//c是'abc'
//a不变

array.pop()

pop和push方法使得array可以像堆栈(stack)一样工作。pop方法移除array中的最后一个元素并返回改元素。如果array是empty,则返回undefined。

1
2
3
4
var a = ['a','b','c'];
var c = a.pop();
//c 是 'c'
//a 变成['a','b']

pop可以像这样实现:

1
2
3
Array.method('pop', function() {
return this.splice(this.length - 1, 1)[0];
});

array.push(item…)

push方法把一个或多个参数item附加到一个数组的尾部。和concat方法不同的是,它会修改array,如果参数item是一个数组,它会把参数数组作为单个元素整个添加到数组中,并返回整个array的新长度值。

1
2
3
4
5
var a = ['a','b','c'];
var b = ['x','y','z'];
var c = a.push(b, true);
//a 变为 ['a','b','c',['x','y','z'], true]
//b不变,c为5

push可以像这样实现:

1
2
3
4
5
6
7
Array.method('push', function() {
this.splice.apply(
this,
[this.length, 0].concat(Array.prototype.slice.apply(aruguments));
return this.length;
);
});

array.reverse()

reverse方法反转array里的元素的顺序,并返回array本身:

1
2
3
var a = ['a','b','c'];
var b = a.reverse();
//a和b都是['c','b','a']

array.shift()

shift方法移除数组array中的第一个元素并返回该元素。如果这个数组array是空的,它会返回undefined。shift通常比pop慢的多:

1
2
3
4
var a = ['a','b','c'];
var c = a.shift();
//a变为['b','c']
//c是'a'

shift可以这样实现:

1
2
3
Array.method('shift', function() {
return this.splice(0, 1)[0];
});

array.unshift(item…)

unshift方法像push方法一样,用于把元素添加到数组中。但它是吧item插入到array的开始。返回array新的length:

1
2
3
4
var a = ['a','b','c'];
var r = a.unshift('?','@');
//a变为['?','@','a','b','c']
//r为5

unshift可以这样实现:

1
2
3
4
5
6
7
Array.method('unshift', function () {
this.splice.apply(
this,
[0, 0].concat(Array.prototype.slice.apply(arguments));
return this.length;
);
});

array.slice(start, end)

slice方法对array中的一段做浅复制。首先复制array[start],一直复制到array[end]为止。end参数是可选的,默认值为该数组的长度array.length。如果两个参数中的任何一个是负数,array.length会和他们相加,试图让它们成为非负数。如果start大于等于array.length,得到的结果将是一个新的空数组。
注意:千万别把slice和splice弄混了。字符串中也有一个同名方法:string.slice()

1
2
3
4
5
var a = ['a','b','c'];
var b = a.slice(0,1); //b为['a']
var c = a.slice(1); //c为['b','c']
var d = a.slice(1,2); //d为['b']
//a不变

array.splice(start, deleteCount, item…)

splice方法从array中移除一个或多个元素,并用新的item替换它们。start是从array中移除元素的开始位置。deleteCount是要移除的元素个数。它返回一个包含被移除元素的数组。
splice的最主要用处是从一个数组中删除元素。千万不要和slice弄混了

1
2
3
4
var a = ['a','b','c'];
var r = a.splice(1,1,'ache','bug');
//a变为['a','ache','bug','c']
//r为['b']

array.sort(comparefn)

sort方法对array中的内容进行排序。这货还是少用为妙。


String

string.charAt(pos)

charAt方法返回在string中pos位置处的字符。如果pos小于0或者大于等于字符串的长度string.length,则返回空字符串。

1
2
3
var name = 'Curly';
var initial = name.charAt(0);
//initial是'C‘

string.charCodeAt(pos)

与charAty一样,不过返回的是字符码位。如果pos小于0或者大于等于字符串长度,则返回NaN。

1
2
3
var name = 'Curly';
var initial = name.charCodeAt(0);
//initial是67

string.concat(item…)

链接两个字符串,没什么鸟用。直接用’+‘省时省力。

string.indexOf(searchString, position)

indexOf方法在string内查找另一个字符串searchString。如果被找到,返回第一个匹配字符的位置,否则返回-1。可选参数position可设置从string的某个指定的位置开始查找:

1
2
3
4
var text = 'Mississippi';
var p = text.indexOf('ss') //p是2
p = text.indexOf('ss', 3) //p是5
p = text.indexOf('ss', 6) //p是-1

string.lastIndexOf(searchString, position)

lastIndexOf方法和indexOf方法类似,只不过是从该字符串的末尾开始查找:

1
2
3
4
var text = 'Mississippi';
var p = text.lastIndexOf('ss') //p是5
p = text.lastIndexOf('ss', 3) //p是2
p = text.lastIndexOf('ss', 6) //p是5

string.slice(start, end)

slice方法复制string的一部分来构造一个新的字符串。如果start参数是负数,它将与string。length相加。end是可选的,默认值为string.length。如果end参数是负数,那么它将与string.length相加。end参数等于你要取得最后一个字符的位置值加上1.

1
2
3
4
5
6
7
var text = 'and in it he says "Any damn fool could"';
var a = text.slice(18);
//a为'"Any damn fool could"'
var b = text.slice(0,3);
//b为’and‘
var c = text.slice(-5);
//c为'could'

string.substring(start, end)

与slice方法一样。没有任何理由使用它,直接用slice。

string.toLowerCase() && string.toUpperCase()

没啥可说的,返回一个新的字符串,实现大小写转换

string.split(separator, limit)

split方法把string分割成片段来创建一个字符串数组——字符串转数组。可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式。
如果separator是一个空字符,会返回一个单字符的数组:

1
2
3
var digits = '0123456789';
var a = digits.split('',5);
// a 为['0','1','2','3','4']

否则,此方法会在string中查找所有separator出现的地方,分隔符两边的两个单元文本会被复制到改数组中。此方法忽略g标识:

1
2
3
4
5
6
var ip = '192.168.1.0';
var b = ip('.');
//b为['192','168','1','0']

var c = '|a|b|c|'.split('|');
// c为['','a','b','c','']

当sparator时一个正则表达式时,现代浏览器会在输出的数组中排除掉空字符串:

1
2
var f = '|a|b|c|'.split(/\|/);
//f为['a','b','c']

array和string常用方法就先总结到这里。当然有没列出来的方法,不过工作中很少用。string中有关regExp的方法一律没写,那些还是拖到正则表达式的有关文章里再写吧(围笑。

参考书籍:《JavaScript语言精粹》,JavaScript:The Good Parts,作者: Douglas Crockford