JavaScript数据结构

一、几个要点

  • 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,说明索引是被转换了类型的
}

猜你喜欢

转载自blog.csdn.net/w_bu_neng_ku/article/details/80280372