Js再起之数组和字符串
简单的介绍
//创建
var arr = new Array(element0, element1, ..., elementN); //别用
var arr = Array(element0, element1, ..., elementN); //也别用
var arr = [element0, element1, ..., elementN];
// 译者注: var arr=[4] 和 var arr=new Array(4)是不等效的,
// 后者4指数组长度,所以使用字面值(literal)的方式应该不仅仅是便捷,同时也不易踩坑
arr.length; //这个是数组的长度, 实际上只是整数索引的长度, 对于其他索引是失效的.
//遍历
let arr = [3, 5, 7];
arr.foo = "hello";
//第一种for循环
var colors = ['red', 'green', 'blue'];
for (var i = 0; i < colors.length; i++) {
console.log(colors[i]);
}
//第二种 for in 这里是key, 需要arr[i]拿值
for (let i in arr) { //会列出非整数索引.
console.log(i); // logs "0", "1", "2", "foo"
}
//第三种 for of 这里直接是值, 但是会有不全
for (let i of arr) {
console.log(i); // logs "3", "5", "7" // 注意这里没有 hello
}
//第四种 foreach 小括号套着大括号很烦的. 这个地方最好是传入一个函数变量. 函数作为常量声明更为合理.
var colors = ['red', 'green', 'blue'];
colors.forEach(function(color) {
console.log(color);
});
//奶奶的, 我明白了, js就是perl啊.
精华
//创建
var arr = ['red', 'green', 'blue'];
//遍历 for in
for (let i in arr) { //会列出非整数索引.
console.log(i); // logs "0", "1", "2", "foo"
}
//遍历自己
arr.forEach(function(color) {
console.log(color);
});
//胖箭头, 很神奇, 下面的大括号不可以省略在safari的console里面.
arr.forEach((color)=>{console.log(color);});
数组的函数
这个地方解惑了, 他有很多函数是有回调的(最后一个参数是回调函数), 也就很多函数的默认最后一个参数是调用者自身(这个时候, 回调函数就是倒数第二个了), 这个真的令人发指.
//这四个函数让数组可以作为堆栈使用.
push();
pop();
shift();
unshift();
//排序
var sortFn = function(a, b){
if (a[a.length - 1] < b[b.length - 1]) return -1;
if (a[a.length - 1] > b[b.length - 1]) return 1;
if (a[a.length - 1] == b[b.length - 1]) return 0;
}
myArray.sort(sortFn);
//下面都是又有回调, 又默认传入自己的.
forEach();
map();
filter();
没啥用的属性
- 数组可以嵌套.
- 数组还有类对象这个说法, 有一些没啥用的函数和属性, 或许你们会看到所谓的’大神’使用这个.
数组推导式comprehensions 这个已经被废弃, 是不被推荐的特性, 中文文档落后了.
//主要是替换掉map和filter这样的回调+自身引用的函数.
var numbers = [1, 2, 3, 21, 22, 30];
var doubledEvens = [i * 2 for (i of numbers) if (i % 2 === 0)];
console.log(doubledEvens); // logs 4,44,60
把数组输出为字符串
- xxx.toString()就可以了, 表现完美
- JSON.stringify(fname) 这个是展示为对象
把字符串当做数组遍历
Array.forEach("a string", function(chr) {
console.log(chr);
});
操作缓冲区的数组: typed array
神奇了, 为了操作缓冲区, JavaScript专门定义了数据结构.
尾声: 没有看到key:velue的map形式, 看来, 还要继续学习.
字符串也可以当做数组处理
var mystring = "Hello, World!";
var x = mystring.length; //字符串的长度.
//拼接方式1, 有点费劲.
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."
//拼接方式2, 和其他脚本语言接近了. 但是自动高亮代码之后这个反引号很丑陋.
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."
特别有用的函数
//数组函数
push() 在数组末尾添加一个或多个元素,并返回数组操作后的长度。
pop() 从数组移出最后一个元素,并返回该元素。
shift() 从数组移出第一个元素,并返回该元素。
//字符串
split 通过将字符串分离成一个个子串来把一个String对象分裂到一个字符串数组中。
trim 去掉字符串开头和结尾的空白字符。
match, replace, search 通过正则表达式来工作.
dorder.splice(x, 0, d) //再x位置插入d, 0代表不删除内容.
字符串截取
str.substring(indexStart[, indexEnd])
str.substr(start[, length]) 这个好, 这个短