一、几个要点
- underscore.js
- Map
- Set
- 数组
二、使用介绍
1. underscore大法,函数式编程,短小精悍,简洁优雅
var _ = require('underscore');
_.each([1,2,3,4,5], function (n) {
console.log(n);
});
console.log(_.range(10));
console.log(_.range(1,11));
console.log(_.range(1,100,10));
console.log(_.range(4).map(function () { return 'oop~' }))
// map
console.log(_.map([1,2,3], function (num) {
return num * 3;
}));
//reduce
var sum = console.log(_.reduce([1,2,3], function (memo,num) {
console.log(memo,num);
return memo + num;
}, 0));
//filter
var event = _.filter([1,2,3,4,5,6], function (num) {
return num%2 == 0;
});
console.log(event);//[ 2, 4, 6 ]
//reject;与fiter相反,忽略满足条件的元素
var event = _.reject([1,2,3,4,5,6], function (num) {
return num%2 == 0;
});
console.log(event);//[ 1, 3, 5 ]
//invoke:对列中的每个元素调用指定的函数,注意,外层用[]
var event = _.invoke([[6,3,5,8]],'sort');
console.log(event);//[ [ 3, 5, 6, 8 ]]
var event = _.invoke([[6,3,5,8],[2,1,5,7]],'sort');
console.log(event);//[ [ 3, 5, 6, 8 ], [ 1, 2, 5, 7 ] ]
//对字符数组,外层不需要[]!!!
var event = _.invoke(['cat', 'fat', 'hat'],'toUpperCase');
console.log(event);//[ 'CAT', 'FAT', 'HAT' ]
//去重
var res = _.uniq([1,1,2,2,2,3,5,6]);
console.log(res);//[ 1, 2, 3, 5, 6 ]
//分组
var parts = _.partition([0,1,2,3,4,5,6], function (n) { return n%2==0;});
console.log(parts);//[ [ 0, 2, 4, 6 ], [ 1, 3, 5 ] ]
//压缩,去掉假值
var com = _.compact([1,'',undefined, 2, NaN, null, 0,3]);
console.log(com);//[ 1, 2, 3 ]
//删除指定值
var out = _.without([1,2,3,4,5,6], 1,2,3);
console.log(out);//[ 4, 5, 6 ]
2.ES6引入的map
支持各种类型的键
let map = new Map();
map.set("index", 1);
map.set(2,"second");
console.log(map.get(2))
console.log(map.size)
console.log(map.has('index'))
for(var [key, value] of map) {
console.log("key:" + key +", value:" + value);
}
3. ES6引入的set
集合内每个元素是唯一的
var set = new Set();
set.add(1);
set.add("hello");
set.add(false);
set.add({
name:"sysu"
})
console.log(set.size)
4. 再谈JavaScript的数组
- length属性
- 从Array.prototype处继承的函数
- 对数字类型的键会做特殊处理(敲黑板~~)。使用数字索引时,实际上是下面这样的
aar[0]在内部实际上是arr["0"]
- 通过索引访问数组,可不是一个常数时间的操作,因为数组实际上是键值对映射,具体访问要依赖于映射的分布
- 数组是稀疏的,有默认值undefined
var a = [];
a[5] = 5;
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
//undefined,undefined,undefined,undefined,5
}
for(var x in a) {
console.log(x); // "5" ,是属性
console.log(a[x]) //5,是属性的值
console.log( typeof x) //string,属性类型是string,说明索引是被转换了类型的
}