数组集
数组交集
普通数组
filter()
创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
filter() 不会对空数组进行检测。
filter() 不会改变原始数组。
indexOf()
采用方法可返回某个指定的字符串值在字符串中首次出现的位置。
如果没有找到匹配的字符串则返回 -1。
const arr1 = [1, 2, 3, 4, 5, 8];
const arr2 = [5, 6, 7, 8, 9];
const data = arr1.filter( (val =>{
return arr2.indexOf(val) >= 0
}))
// arr2数组中依次循环arr1数组中相匹配的值,
// arr1数组中的5在arr2数组中首次出现的下标为第0个,
// 8为第三个,所以判断 >= 0 返回在data中 打印 [5, 8]
console.log(data) [5, 8]
数组对象
some()
用于检测数组中的元素是否满足指定条件(函数提供)
方法会依次执行数组的每个元素:
如果有一个元素满足条件,则返回ture,剩余的不会在执行检测。
如果没有满足条件的元素,则返回false。
不会对空数组进行检测。
不会改变原始数组。
循环列出数组 arr1 与 arr2 的所有键值对,使用some方法依次进行匹对,数组 arr2 中 id 为 4 的对象与 arr1 中的数组没有相对应的匹配值,最终使用比较运算符得出除过id为 4 的所有值。
数组对象目前仅针对value值为简单的Number
、String
、Boolan
数据类型。
下例中JSON.stringif()
比较对象是简写方法,完整的对象比较。
const arr1 = [
{name: 'name1', id: 1}, {name: 'name2', id: 2},
{name: 'name3', id: 3}, {name: 'name5', id: 5}
];
const arr2 = [
{name: 'name1', id: 1}, {name: 'name2', id: 2},
{name: 'name3', id: 3}, {name: 'name4', id: 4},
{name: 'name5', id: 5}
];
const result = arr2.filter(function (v) {
// 简写 return arr1.some(n => JSON.stringify(n) === JSON.stringify(v))
return arr1.some(n => {
return JSON.stringify(n) === JSON.stringify(v)
})
})
console.log(result);
// [
// {name: 'name1', id: 1},
// {name: 'name2', id: 2},
// {name: 'name3', id: 3},
// {name: 'name5', id: 5}
// ]
数组并集
普通数组
concat()
concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。includes()
方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
次方法也可以给检测字符串如下例:
let str = "巴卡拉卡!乌龟变"
str.includes('乌龟变') true
str.includes('大乌龟') false
对数组 arr2 进行过滤获取 arr2 中的所有数组然后使用 includes 方法依次对 arr2 数组进行比对,抛出为 ture的数据,使用 concat 方法将抛出的数据与 arr1 进行合并。
const arr1 = [1, 2, 3, 4, 5, 8, 9]
const arr2 = [5, 6, 7, 8, 9, 9, 8];
// 简写 const result = arr1.concat(arr2.filter(v => !arr1.includes(v)))
const result = arr1.concat(
arr2.filter((v=>{ return !arr1.includes(v) }))
)
console.log(result) //[1, 2, 3, 4, 5, 8, 9, 6, 7]
数组对象
reduce()
接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
可以作为高阶函数,用于函数的compose
。
reduce
对空数组是不会做执行的。语法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total:初始值,或者计算结束之后的返回值。
currentValue:当前的元素。
ccurrentIndex:当前的索引。
arr:当前元素的所有数组对象。
initialValue:可选,传递函数的初始值。
// 将numbers的数组进行相加
let numbers = [15, 2, 1, 4];
const num = numbers.reduce(function (total, currentValue, currentIndex, arr){
return total + currentValue
});
console.log(num) // 22
使用三元运算对数组对象进行去重。
const arr1 = [
{name: 'name1', id: 1},
{name: 'name2', id: 2},
{name: 'name3', id: 3}
];
const arr2 = [
{name: 'name1', id: 1},
{name: 'name4', id: 4},
{name: 'name5', id: 5}
];
let arr3 = arr1.concat(arr2);
let result = [];
let obj = [];
result = arr3.reduce(function (prev, data, index, arr) {
obj[data.id] ? '' : obj[data.id] = prev.push(data)
return prev;
}, []);
console.log(result);
// [
// { name: 'name1', id: 1 },
// { name: 'name2', id: 2 },
// { name: 'name3', id: 3 },
// { name: 'name4', id: 4 },
// { name: 'name5', id: 5 }
// ]
暂无标签
不错不错,我喜欢看 https://www.jiwenlaw.com/
怎么收藏这篇文章?
看的我热血沸腾啊https://www.ea55.com/