1、ES6语法find查找匹配数组
let data = [
{id:1,value:false},
{id:2,value:false},
{id:3,value:false}
];
let id = 3
let findVal = data.find(item => {
return item.id === id
})
findVal.value = true; //修改匹配项的值
2、ES6 findIndex 对象数组查找某一个对象
- findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置
- findIndex()方法为数组中的每个元素都调用一次函数执行
- 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用 执行函数。 如果没有符合条件的元素返回 -1
let arr = [{
name: '小王',
age: 14
},{
name: '大王',
age: 41
},{
name: '老王',
age: 61
}]
function fn(obj, objIndex, objs){
return num.age > 20;
}
console.log(arr.findIndex(fn)) //值为1(即大王的下标)
3、数组转字符串
let arr = [1,2,3,4,'merge']
let str = arr.join(',')
console.log(str); // 1,2,3,4,merge
let a = [1,2,3,4,5,6,7,8,9,0]; //定义数组
let s = a.toString(); //把数组转换为字符串,默认用 ','来连接各个元素
console.log(s); //返回字符串“1,2,3,4,5,6,7,8,9,0”
console.log(typeof s); //返回字符串string,说明是字符串类型
let a = [1,[2,3],[4,5]],[6,[7,[8,9],0]]]; //定义多维数组
let s = a.toString(); //把数组转换为字符串
console.log(S); //返回字符串“1,2,3,4,5,6,7,8,9,0”
数组转字符串:
String[] arr = { "0", "1", "2", "3", "4", "5" };
// 遍历
StringBuffer str5 = new StringBuffer();
for (String s : arr) {
str5.append(s);
}
System.out.println(str5.toString()); // 012345
4、字符串转数组
let str = '1,2,3,4'
let arr = str.split(',')
console.log(arr) // ["1", "2", "3", "4"]
5、字符串转数组,数组转数组格式化,数组格式化转数组
let str = '1,2,3,4';
let arr = str.split(',');
let strify = JSON.stringify(arr);
console.log(arr); // ["1", "2", "3", "4"] 数组
console.log(strify); // ["1", "2", "3", "4"] 字符串
let arrParse = JSON.parse(strify);
console.log(arrParse); // ["1", "2", "3", "4"] 数组
6、数组入列,出列,出栈,入栈
let arr = ['1','2','3','4','5']
console.log (arr.pop());
数组出栈, 方法用于删除并返回数组的最后一个元素,改变原数组。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值
console.log (arr.push('我是被添加进来的'));
数组入栈,push有返回值,返回数组的新长度
console.log (arr.shift());
数组出列,方法用于把数组的第一个元素从其中删除,并返回第一个元素的值,改变原数组。
console.log (arr.unshift('我是被放在后面的'));
数组入列,也有返回值,返回数组的新长度
7、数组颠倒、截取、删除后添加、排序
arr.reverse() // 将数组反序
arr.slice(1,3)
arr.splice(0,1,'我是删除后添加的新元素')
sort(orderfunction):按指定的参数对数组进行排序
若 a 小于 b,即 a - b 小于零,则返回一个小于零的值,数组将按照升序排列。
若 a 等于 b,则返回 0。
若 a 大于 b, 即 a - b 大于零,则返回一个大于零的值,数组将按照降序排列。
let a = function (a,b)
{
return a-b;
}
var arr=[6,2,3,4,5,10,20,65,25];
console.log(arr.sort(a));
slice可以接受一个或两个参数(start,end)开始位置和结束位置。这个方法用于从数组中截取参数,当然不改变原数组。例如:
var num=[1,2,3,4,5];
num.slice(2,4);//[3,4];
console.log(num);//[1,2,3,4,5]
splice这个方法有三种使用方式(改变数组)
1.删除 两个参数 start,length 即开始位置和删除的长度
2.插入 三个参数 start,length(删除),content(要插入的内容)
3.替换(也可以叫做删除后插入)同样是三个参数
例子如下:
var num=[1,2,3,4];
var del=num.splice(0,2);// [1,2]
console.log(num);//[3,4];
var insert=num.splice(1,0,"5","6");//返回空 第二参数是0
console.log(num);//[3,5,6,4]
var change=num.splice(1,1,"7","8");//[5]
console.log(num);//[3,7,8,6,4]
注意:slice影响原数组,splice不影响原数组
按照数组对象中某个属性值进行排序
根据参数来确定是升序还是降序
8、对象数组拆分
let source_arr = [{"早上":5,"中午":1608,"晚上":357,"中午和晚上":217}];
||
let out_arr = [{name:"早上",value:5},{name:"中午",value:1608},{name:"晚上",value:357},{name:"中午和晚上",value:217}];
<script type="text/javascript">
let source_arr = [{"早上":5,"中午":1608,"晚上":357,"中午和晚上":217}]
// [{"早上":5,"中午":1608,"晚上":357,"中午和晚上":217}]
// [{name:"早上",value:5},{name:"中午",value:1608},{name:"晚上",value:357},{name:"中午和晚上",value:217}]
let obj = source_arr[0];
let out_arr = []; //创建一个数组
for(let key in obj){
let temp = {}; //创建临时对象
temp.name = key; //存储对象的Key为name
temp.value = obj[key]; //存储value
out_arr.push(temp);
}
let res = JSON.stringify(out_arr); //转换json
</script>
9、对象数组拆分
unshift:将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。
concat:返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
splice(start,deleteCount,val1,val2,…):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,…
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length; //同unshift
var b = a.splice(a.length-1,1); //同pop
a.splice(a.length,0,6,7); var b = a.length; //同push
//Array:
/*新建:*/var ary = new Array(); 或 var ary = [];
/*增加:*/ary.push(value);
/*删除:*/delete ary[n];
/*遍历:*/for ( var i=0 ; i < ary.length ; ++i ) ary[i];
//Object:
/*新建:*/var obj = new Object(); 或 var obj = {};
/*增加:*/obj[key] = value; (key为string)
/*删除:*/delete obj[key];
/*遍历:*/for ( var key in obj ) obj[key];
10、map,forEach,filter,every,some
这几个迭代方法包含两个参数:第一个要对数组对象操作的方法函数,第二个(可选参数)为作用域对象
方法函数可以传递三个参数:1.数组中每个对象,2在数组中的位置,3,数组对象本身(可选)。
every()返回一个真假值 主要对数组中每个对象进行判断,每个判断为true时最后 every会返回true
some() 和every差不多,不同这个是只要有一个符合条件就会返回true
map() 返回一个数组,返回每个操作函数所需要的值 组成数组forEach()没有返回值 主要通过参数函数对数组中对象进行操作filter()过滤器 返回true的数组(符合条件时候)
var num=[1,2,3,4,5];
num.every(function(item,index){return item>1});// false
num.some(function(item,index){return item>1});//true
num.map(function(item,index){return item*2});// [2, 4, 6, 8, 10]
num.forEach(function(item,index){console.log(item*2)});
num.filter(function(item,index){return item>2});// [3, 4, 5]
11、js 数组转json,json转数组
//数组转json串
var arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
//json字符串转数组
var jsonStr = '[1,2,3,{"a":1}]';
JSON.parse( jsonStr );
12、例如
let arr =[
{"id":"1001","name":"值1","value":"111"},
{"id":"1001","name":"值1","value":"11111"},
{"id":"1002","name":"值2","value":"25462"},
{"id":"1002","name":"值2","value":"23131"},
{"id":"1002","name":"值2","value":"2315432"},
{"id":"1003","name":"值3","value":"333333"}
]
||
[
{
"id": "1001",
"name": "值1",
"data": [
{"id": "1001", "name": "值1", "value": "111"},
{ "id": "1001", "name": "值1", "value": "11111"}
]
},
{
"id": "1002",
"name": "值2",
"data": [
{ "id": "1002", "name": "值2", "value": "25462" },
{ "id": "1002", "name": "值2", "value": "23131"},
{"id": "1002", "name": "值2","value": "2315432" }
]
},
{
"id": "1003",
"name": "值3",
"data": [
{"id": "1003", "name": "值3", "value": "333333" }
]
}
]
var map = {},
dest = [];
for(var i = 0; i < arr.length; i++){
var ai = arr[i];
if(!map[ai.id]){
dest.push({
id: ai.id,
name: ai.name,
data: [ai]
});
map[ai.id] = ai;
}else{
for(var j = 0; j < dest.length; j++){
var dj = dest[j];
if(dj.id == ai.id){
dj.data.push(ai);
break;
}
}
}
}
console.log(dest);
14、判断某个数组中是否包含另一个数组
var a = [1,2,3,4,5];
var b = [1,4,3,2];
var c = [1,6];
alert(isContained(a,b));//true
alert(isContained(a,c));//false
//是否被包含,是返回true,不是返回false
isContained =(a, b)=>{
if(!(a instanceof Array) || !(b instanceof Array)) return false;
if(a.length < b.length) return false;
var aStr = a.toString();
for(var i = 0, len = b.length; i < len; i++){
if(aStr.indexOf(b[i]) == -1) return false;
}
return true;
}
数组基础