这是我参与更文挑战的第2天,活动详情查看: 更文挑战
为了方便测试代码,都写成了可在控制台输出的函数😀
找出两个数组中id不相同/相同的对象
let arr1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]
let arr2 = [{ id: 1 }, { id: 2 }, { id: 3 }]
let arr3 = arr1.filter(item => {
let idList= arr2.map(v => v.id)
return !idList.includes(item.id)
})
console.log(arr3)
合并数组相同对象,属性值相加
var a = [
{id:1,num:"12"},
{id:2,num:"13"},
{id:3,num:"3"},
{id:2,num:"16"},
{id:5,num:"14"},
{id:1,num:"14"}
]
var b = []
for(var i = 0; i < a.length;i++){
for(var j = a.length-1;j>i;j--){
if(a[i].id == a[j].id){
a[i].num = (a[i].num*1 + a[j].num*1).toString()
b.push(j)
}
}
}
for(var k = 0; k<b.length;k++){
a.splice(b[k],1)
}
console.log(a)
计算数组中某个元素重复出现的个数
let list = ["李","李","设","弟","弟","生","生","李"];
let counts = list.reduce((a, v) => v === "李" ? a + 1 : a + 0, 0);
console.log(counts);//3
计算数组中每个元素重复出现的个数
var arr = ["李","李","设","弟","弟","生","生","李"];
function getRepeatNum1(){
var obj = {};
for(var i= 0, l = arr.length; i< l; i++){
var item = arr[i];
obj[item] = (obj[item] +1 ) || 1;
}
return obj;
}
function getRepeatNum2(){
return arr.reduce(function(prev,next){
prev[next] = (prev[next] + 1) || 1;
return prev;
},{});
}
console.log(getRepeatNum1());//{李: 3, 设: 1, 弟: 2, 生: 2}
console.log(getRepeatNum2());//{李: 3, 设: 1, 弟: 2, 生: 2}
数组找出不同的元素
let sameArr = (arrOne,arrTwo) => arrOne.filter(item => arrTwo.findIndex(subItem => subItem.id == item.id) === -1)
sameArr([{id:12},{id:13}],[{id:20},{id:13}])//[{id:12}]
数组里时间排序
let arr = [{Date:'2020-10-21'},{Date:'2020-10-20'},{Date:'2020-10-22'}]
arr.sort((a, b) => new Date(b.Date.replace(/-/g, '/')).getTime() - new Date(a.Date.replace(/-/g, '/')).getTime())
console.log(arr)
筛选数组对象中的属性
let arr =[
{
"id": "b3bae8fcde0d4a50b7fbcbbccf4fe216",
"sex": 2,
"userAccount": "chenghua",
"userName": "lomo"
}
];
let afterArr = arr.map(item=>{
let obj ={
"sex": '',
"userAccount": "",
"userName": ""
}
Object.keys(obj).forEach(key=>{obj[key]=item[key]})
return obj
})
//或
let afterArr = arr.map(item=>{
return {
sex: item.sex,
userAccount: item.userAccount,
userName: item.userName
}
})
console.log(afterArr)
两个数组对象有相同的某个属性值,补全另一个数组对象属性值
let a = [
{
'name': 'wang',
'age': '18',
'six': '1'
}
];
let b = [
{
'name': 'wang',
'age': '8',
'six': ''
}
];
for (let i = a.length; i--;) {
for (let j = b.length; j--;) {
if (a[i].name === b[j].name) {
b[j].six = a[i].six;
break; // 条件满足跳出循环
}
}
}
console.log(b);//[{name: 'wang', age: '8', six: '1'}]
树形数组递归拿到子项数据
//数据
let data1= [
{
title: 'parent 1',
expand: true,
children: [
{
title: 'parent 1-1',
expand: true,
tag:true,
children: [
{
title: 'leaf 1-1-1'
},
{
title: 'leaf 1-1-2'
}
]
},
{
title: 'parent 1-2',
expand: true,
tag:true,
children: [
{
title: 'leaf 1-2-1'
},
{
title: 'leaf 1-2-1'
}
]
}
]
}
]
function getInnerMenuList(menuTreeList, menuList) {
for (let item of menuTreeList) {
/*判断是否符合递归条件(这里不是一定要最递归到最里面的层级,想得到某一层级
的数据,递归条件就判断这一层级的特有属性即可,例如本例想得到1-1这一层级,
!item.tag 就可以是递归条件)*/
item.children?getInnerMenuList(item.children, menuList):menuList.push(item)
}
};
let arr = [];
getInnerMenuList(data1,arr);
console.log(arr);
//0: {title: "leaf 1-1-1"}
//1: {title: "leaf 1-1-2"}
//2: {title: "leaf 1-2-1"}
//3: {title: "leaf 1-2-1"}
根据条件数组筛选另一数组
//条件数组
let ageList = [12,16];
//被筛选的数组
let objList = [
{name:'tom',age:12},
{name:'jack',age:33},
{name:'zio',age:12},
{name:'lolo',age:89},
{name:'robin',age:16},
]
//1
let data = objList.filter((item/)=> ageList.includes(item.age));
console.log(data)
//2
let map = {};
let ret = [];
objList.forEach(item => (map[item.age] = map[item.age]||[]).push(item));
ageList.forEach(item => map[item] && [].push.apply(ret, map[item]));
console.log(ret);
数组对象里的属性求和
var result = [
{
subject: 'math',
score: 10
},
{
subject: 'chinese',
score: 20
},
{
subject: 'english',
score: 30
}
];
let sum = result.reduce((prev, cur)=> cur.score + prev, 0);
console.log(sum) //60
版本号比较
//1 "2.2.3"、"v2.2.3"适用 不适用"2.3.0a"
function compareVersion(a,b){
function toNum(a){
var a=a.toString();
var c=a.split(/\D/);
var num_place=["","0","00","000","0000"],r=num_place.reverse();
for (var i=0;i<c.length;i++){
var len=c[i].length;
c[i]=r[len]+c[i];
}
var res= c.join('');
return res;
}
var _a=toNum(a),_b=toNum(b);
if(_a==_b) return '相等'
if(_a>_b) return '大于'
if(_a<_b) return '小于'
}
compareVersion("2.2.3","2.3.0");
compareVersion("v2.2.3","v2.3.0");
//2 "2.2.3"、"v2.2.3"、"2.3.0a"都适用
function cpr_version(a,b){
Array.prototype.triming=function(){
var arr=[];
this.forEach(function(e){
if(e.match(/\S+/)) arr.push(e);
})
return arr;
}
//提取数字部分
function toNum(a){
var a=a.toString();
var c=a.split(/\D/).triming();
var num_place=["","0","00","000","0000"],r=num_place.reverse();
for (var i=0;i<c.length;i++){
var len=c[i].length;
c[i]=r[len]+c[i];
}
var res= c.join('');
return res;
}
//提取字符
function toChar(a){
var a=a.toString();
var c=a.split(/\.|\d/).join('');
return c;
}
let _a1=toNum(a),_a2= toChar(a), _b1=toNum(b),_b2= toChar(b);
if(_a1>_b1) console.log("版本号"+a+"是新版本!");
if(_a1<_b1) console.log("版本号"+b+"是新版本!");
if(_a1===_b1) {
_a2=_a2.charCodeAt(0).toString(16);
_b2=_b2.charCodeAt(0).toString(16);
if (_a2>_b2) console.log("版本号"+a+"是新版本!");
if(_a2<_b2) console.log("版本号"+b+"是新版本!");
if(_a2===_b2) console.log("版本号相同!版本号为:"+a);
}
}
cpr_version("2.3.0a","2.3.0b");
cpr_version("2.3.0c","2.3.0c");