数组与对象
关于数组
-
什么是数组?
索引从0开始,并且存放相同结构的集合 是数组
-
为什么有数组?(数组解决了什么问题,也是数组的作用?
相同结构的数据 统一管理(处理)问题
-
数组有什么特点
1:由 索引和数组元素组成
2:有序的 与长度(长度表示数组有多少个元素,每个都有自己的位置编号)
3:数组元素可以为js任意类型的数据 -
索引作用:查找元素
-
长度的作用:记录数组有多少元素
数组的新增
-
var arr = [2, 3, 5, 7, 8];
1.从arr尾部加 ‘dundun’
arr[arr.length] = 'dundun'
- 从arr头部加 ‘xuerongrong’
方法1
var arr_ = [];
arr_[0] = 'xuerongrong';
for (var i = 0, len = arr.length; i < len; i++) {
var count = i + 1;
//将数据新增到 arr_中
arr_[count] = arr[i]
}
思路:引进一个新数组,将新数组索引值为0的地方放上’xuerongrong’,引入一个变量count=i+1;也就是将原数组每一个索引往后移动一位后放进新数组.
方法2:换值
var arr = [2, 3, 5, 7, 8];
for (var i = arr.length; i >= 0; i--) {
arr[i] = arr[i - 1];
}
arr[0] = 'xuerongrong';
console.log(arr);
思路:重点在于length的长度,长度刚好等于索引值+1,可以让索引值被赋值到后一位
3.在第三个位置 加’bingdundun’
var val = 'bingdundun';
var old = [arr[3], arr[4]];
arr[3] = val;
for (var i = 0; i < old.length; i++) {
var count = 3 + i + 1;
arr[count] = old[i]
}
console.log(arr);
扩展:封装成函数
- 1.将一个字符串放在一个数组后面
var arr1 = [2, 2, 3, 4, 6, 1];
var str = 'bingdundun';
function push(arr, name) {
var arr_ = [];
arr_[arr.length] = name;
for (var i = 0; i < arr.length; i++) {
arr_[i] = arr[i];
}
return arr_;
}
push(arr1, str);
思路:length的值刚好是比索引值大1位的,可以直接把最后面的这个位置让给将要加进来的新元素
如果新加入的元素不止一个呢?或者是个数组怎么办呢?看下面的这种方法.
- 2.将一个数组放在另个给数组后面
var arr1 = [2, 2, 3, 4, 6, 1];
function push(arr, name) {
var arr_ = [];
// arr_[arr.length] = name;
for (var i = 0; i < arr.length; i++) {
arr_[i] = arr[i];
}
for (var j = 0; j < name.length; j++) {
arr_[arr_.length] = name[j];
}
return arr_;
}
push(arr1, res);
思路:和上面的一种方法差不多,将函数封装起来,并且找一个形参(name)来接受实参,不一样的是刚才的实参是一个字符串,现在的实参是一个数组,只需要将新数组遍历一下,依次写进新新数组即可.
知识点:obj['a']在是一个静态的对象中放键
obj[a]是给一个对象动态的赋值,一般用遍历的方法.
对象
对象的定义
-
对象: 用于表示不同意义的数据 对象: key - value 键值对 key 键 value 值 key 都是字符串 相当于变量 value 任意类型的js数据
-
循环读取所有key
var keyArr = [] var len = keyArr.length; for (var k in obj) { console.log(k); keyArr[len] = k; len++ } console.log(keyArr);
-
获取对象中的键
function keys(obj) { var res = []; var len = res.length; for (var k in obj) { res[len] = k; len++ } return res } var keysArr = keys(obj); console.log(keysArr);
-
获取对象中的值
function values() { var res = []; for (var k in obj) { var len = res.length; res[len] = obj[k]; } return res } var obj_val = values(obj)
数组的增删改
增
push() 从数组尾部新增元素
参数:被新增的元素
arr.push('dundun');//在后面加
arr.unshift('xuerongrong');//加在最前面
// arr.splice(index,count,addEL)//从哪里加;加几个;加的什么
arr.splice(1, 1, 'aaa');
concat() 数组合并
var test = [1, 3, 4]
arr = arr.concat(test)
删
从头
arr.shift()
从尾
arr.pop()
从某一个位置删除几个元素
arr.splice(1,1)
改
arr.splice(1, 1, '更改数据')
查询
var test = 'gaohangyang';
var res = arr.indexOf(test);
测试题
1 将数组变为对象
输入 var arr = [‘name’,‘fanzhen’,age,12]
输出: {name:‘fanzhen’,age:12}
-
方法1
var arr = ['name', 'fanzhen', 'age', 12]; var obj = {}; var keys = [] var vals = [] for (var i = 0; i < arr.length; i++) { if (i % 2 === 0 || i== 0 ) { keys.push(arr[i]) }else{ vals.push(arr[i]) } } for(var j = 0;j<keys.length;j++){ obj[keys[j]]=vals[j] } console.log(obj); 思路:声明一个空对象,一个存键的数组keys,一个存value值的数组vals , 将原数组中的索引值为偶数的拿出来存在keys中, 将原数组中的索引值为奇数的拿出来存在vals中, 最后将value值赋给keys,就可以将obj打印下来
-
方法2.
var arr = ['name', 'fanzhen', 'age', 12]; var obj = {}; for (var i = 0; i < arr.length; i++) { if (i == 0 || i % 2 == 0) { var key = arr[i]; } else { obj[key] = arr[i]; } } console.log(obj); 思路:将索引值为偶数的的拿出来给key 将索引值为奇数的拿出来直接赋值给obj[key] 即可直接打印出所需要的对象
2: 过滤对象中为空字符的字段
输入:{name:’’,age:12}
输出:{age:12}
-
方法2:var obj = { name: '', age: 12 }; for (var key in obj) { if (obj[key] == '') { delete obj[key]; } } console.log(obj);
-
var obj = { name: '', age: 12, sex: '男' }; var newobj = {} for (var key in obj) { if (obj[key] !== '') { newobj[key] = obj[key]; } } obj = newobj; console.log(newobj); 为什么最后已不是将newobj赋给obj???
3: 封装一个数组变对象的函数
-
function objs(arr) { var obj = {}; for (var i = 0; i < arr.length; i++) { if (i == 0 || i % 2 == 0) { key = arr[i]; } else { obj[key] = arr[i]; } } return obj; } var res = objs([2, 3, 5, 6, 4]); console.log(res);
4: 封装一个过滤对象中空字符的函数
-
function objs(arr) { var obj = arr; for (var key in obj) { if (obj[key] == '') { delete obj[key]; } } return obj; } var obj1 = { name: '', age: 12 }; var res = objs(obj1) console.log(res);