数组操作集合

数组交集

普通数组
  • 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值为简单的 NumberStringBoolan数据类型。
下例中 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 }
// ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Salvater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值