- 索引数组
- 增
- 删
- 改
- 查
- 循环
- 关联数组
- 增
- 循环
- 对象
- 增
- 删
- 改
- 查
- 循环
- JavaScript中数组元素删除
- 1、length
- 2、delete 关键字
- 3、栈方法
- 4、队列方法
- 5、操作方法
- 6、迭代方法
- 7、原型方法
- reverse 将数组反序
- 类数组对象转换成数组
- slice() 方法可从已有的数组中返回选定的元素
- Array.from() 类数组转换为数组
- 扩展运算符
- jquery 的 $.makeArray()
- JavaScript数组常用方法
- includes() 判断一个数组是否包含一个指定的值
- fill() 固定值填充一个数组
- find() 返回数组中满足提供的测试函数的第一个元素的值
- findIndex() 返回数组中满足提供的测试函数的第一个元素的索引
- Array.of() 将一组值转变为数组,参数是要转换成数组的值,返回值是新的数组实例
- Array.from() 类数组转换为数组
- reduce 为数组中的每一个元素依次执行回调函数
- 注意:如果这个数组为空,运用 reduce 是什么情况 ?
- reduce 的简单用法
- 计算数组中每个元素出现的次数
- 数组去重
- 将二维数组转化为一维
- 将多维数组转化为一维
- 对象里的属性求和
- es5中新增了5个迭代方法
- forEach() 遍历数组
- map 方法遍历加工数组
- filter 方法遍历过滤数组
- some 方法检测数组中是否有元素(some)满足条件
- every 方法检测数组中是否所有(every)元素满足条件
- splice 修改数组,既删除,又添加
- concat 将值或者数组拼接成新数组
- 1、concat 拼接数组或者值
- 2、concat 做数组的深度拷贝
- join 将一个数组(或一个类数组对象)的所有元素连接成一个字符串
- const 声明常量的本质
- JSON.stringify() 和 JSON.parse()
- 1、判断数组是否包含某对象,或者判断对象是否相等
- 2、localStorage/sessionStorage可以存储对象
- 数组遍历的练习
- 对象的小实例
- 对象 json 写法
- for 杨辉三角
- 查找数组元素位置
- indexOf() 方法查找元素在数组中出现的第一个位置
- lastIndexOf() 方法找到指定元素在数组中的最后一个的索引
- NaN的相等性判断
- 如何使用unicode编码
//1、索引数组
let arr=[1,2,3,4,5];
console.log(arr);
let arr=[1,2,3,4,5];
arr.push(10);
arr[11]=33;
console.log(arr);
let arr=[1,2,3,4,5];
delete arr[1];
console.log(arr);
let arr=[1,2,3,4,5];
arr[2]=99;
console.log(arr);
let arr=[1,2,3,4,5];
console.log(arr[0]); // 1
循环
let arr=[1,2,3,4,5];
for(let i=0;i32;
});
console.log(val); // 2
Array.of() 将一组值转变为数组,参数是要转换成数组的值,返回值是新的数组实例
作用:将一组值转变为数组 参数:要转换成数组的值,elementN 返回值:新的数组实例
let arr=Array.of(1,3,'123',true);
console.log(arr); // [1, 3, "123", true]
Array.from() 方法的作用是将类数组或可迭代对象转换为数组,比如 String、Map、伪数组等,必带的参数是 arrayLike(想要转换成数组的伪数组对象或可迭代对象),Array.from()方法的返回值是新的数组实例,不影响原结构。
作用:将类数组或可迭代对象转换为数组 参数:必带的 arrayLike(想要转换成数组的伪数组对象或可迭代对象) 返回值:新的数组实例 是否影响原结构:不影响
1、从 String 生成数组
let arr1=Array.from('foo');
console.log(arr1);// [ "f", "o", "o" ]
2、从 Set 生成数组
const set = new Set(['foo', 'bar', 'baz', 'foo']);
let arr2=Array.from(set);
console.log(arr2);// [ "foo", "bar", "baz" ]
3、从 Map 生成数组
const map = new Map([[1, 2], [2, 4], [4, 8]]);
console.log(map);// {1 => 2, 2 => 4, 4 => 8}
let arr3=Array.from(map);
console.log(arr3);// [[1, 2], [2, 4], [4, 8]]
const mapper = new Map([['1', 'a'], ['2', 'b']]);
console.log(mapper);// {"1" => "a", "2" => "b"}
let arr4=Array.from(mapper.values());
console.log(arr4);// ['a', 'b'];
let arr5=Array.from(mapper.keys());
console.log(arr5);// ['1', '2'];
从类数组对象(arguments)生成数组
function f() {
console.log(arguments);
console.log(Array.from(arguments)); // [ 1, 2, 3 ]
}
console.log(Array);
console.log(Array.from);
console.log(Array.prototype);
console.log([]);
f(1, 2, 3);
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:
初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
callback (执行数组中每个值的函数,包含四个参数)
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
})
console.log(arr, sum);
var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
},0) //注意这里设置了初始值
console.log(arr, sum);
打印结果:
0 1 0
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10
这个例子 index 是从 0 开始的,第一次的 prev 的值是我们设置的初始值 0,数组长度是 4,reduce 函数循环 4 次。
结论:如果没有提供 initialValue,reduce 会从索引 1 的地方开始执行 callback 方法,跳过第一个索引。
如果提供 initialValue,从索引0开始。
注意:如果这个数组为空,运用 reduce 是什么情况 ?var arr = [];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
})
//报错,"TypeError: Reduce of empty array with no initial value"
但是要是我们设置了初始值就不会报错,如下:
var arr = [];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
},0)
console.log(arr, sum); // [] 0
reduce 的简单用法
当然最简单的就是我们常用的数组求和,求乘积了。
var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24
计算数组中每个元素出现的次数
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(nameNum); // {Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
将二维数组转化为一维
let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
将多维数组转化为一维
let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur) ? newArr(cur) : cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]
对象里的属性求和
var result = [
{
subject: 'math',
score: 10
},
{
subject: 'chinese',
score: 20
},
{
subject: 'english',
score: 30
}
];
var sum = result.reduce(function(prev, cur) {
return cur.score + prev;
}, 0);
console.log(sum) //60
es5中新增了5个迭代方法
forEach() 遍历数组
作用:遍历数组 参数:回到函数,arr.forEach(callback(currentValue [, index [, array]])) 返回值:无(undefined) 是否影响原数组:不影响
let arr=[5,54,12,4,1,23,111];
arr.forEach(function (value,index,array) {
console.log(value);
console.log(index);
console.log(array);
});
forEach() 方法遍历 非连续数组
let arr=[];
arr[1]='a';
arr[5]='g';
arr[10]='h';
arr.forEach(function (value,index) {
console.log(index);
console.log(value);
});
let arr=[5,54,12,4,1,23,111];
let new_arr=arr.map(function (value,index,array) {
// console.log(value);
// console.log(index);
// console.log(array);
return value+1000;
});
console.log(arr);
console.log(new_arr);
let arr=[5,54,12,4,1,23,111];
let new_arr=arr.filter(function (value,index,array) {
return value>10;
});
console.log(arr);
console.log(new_arr);
let arr=[5,54,12,4,1,23,111];
let bool_val=arr.some(function (value,index,array) {
return value>10;
});
console.log(arr);
console.log(bool_val);
let arr=[5,54,12,4,1,23,111];
let bool_val=arr.every(function (value,index,array) {
//return value>10;
return value {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
JSON.stringify() 和 JSON.parse()
JSON.stringify() 的作用是将 JavaScript 对象转换为 JSON 字符串,而 JSON.parse() 可以将JSON字符串转为一个对象。
localStorage/sessionStorage
默认只能存储字符串,而实际开发中,我们往往需要存储的数据多为对象类型,那么这里我们就可以在存储时利用 json.stringify() 将对象转为字符串,而在取缓存时,只需配合 json.parse() 转回对象即可。
let arr = [1,2,3];
JSON.stringify(arr);//'[1,2,3]'
typeof JSON.stringify(arr);//string
let string = '[1,2,3]';
console.log(JSON.parse(string))//[1,2,3]
console.log(typeof JSON.parse(string))//object
在使用 JSON.parse() 需要注意一点,由于此方法是将JSON字符串转换成对象,所以你的字符串必须符合JSON格式,即键值都必须使用双引号包裹:
let a = '["1","2"]';
let b = "['1','2']";
console.log(JSON.parse(a));// Array [1,2]
console.log(JSON.parse(b));// 报错
上面例子中变量b就无法转换,因为格式不符合。
//判断数组是否包含某对象
let data = [
{name:'echo'},
{name:'听风是风'},
{name:'天子笑'},
],
val = {name:'天子笑'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true
//判断两数组/对象是否相等
let a = [1,2,3],
b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b);//true
2、localStorage/sessionStorage可以存储对象
localStorage/sessionStorage
默认只能存储字符串,而实际开发中,我们往往需要存储的数据多为对象类型,那么这里我们就可以在存储时利用 json.stringify()
将对象转为字符串,而在取缓存时,只需配合 json.parse()
转回对象即可。
//存
function setLocalStorage(key,val){
window.localStorage.setItem(key,JSON.stringify(val));
};
setLocalStorage('demo',[1,55,3]);
//取
function getLocalStorage(key){
let val = JSON.parse(window.localStorage.getItem(key));
return val;
};
let a = getLocalStorage('demo');//[1,2,3]
数组遍历的练习
var arr=[
{name:'贾宝玉',score:58},
{name:'林黛玉',score:98},
{name:'薛宝钗',score:90},
{name:'贾环',score:45},
{name:'贾政',score:88},
{name:'袭人',score:59}
];
function getPeople(arr) {
var new_arr=[];
//操作:将arr数组中得分不及格的对象提取出来,添加到new_arr数组中
//1、遍历arr数组
//i 是index
for (var i=0;i=aMeng.score.chinese){
console.log(jingXiang);
}else{
console.log(aMeng);
}
}
var zhubajie={
'name':'猪八戒',
age:999,
pet:{
name:'哮天犬',
age:18
}
};
console.log(zhubajie);
for(var i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?