今天开发项目的某个功能,发现js有个简便检测一个数组是否包含另个数组的方法,记录一下
showSkill()
{
let data = [[0,2,7],[4,6,9,7],[0,4,3,8],[1,5,4,6,2]];
let temp = [4,9,6,7];
data.forEach(function (value,key) {
if (self.isContain(temp,value))
{
console.log("==*== value=>",value);
}
})
},
isContain(arr1,arr2)
{
return arr2.every(key=>arr1.includes(key));
},
结果:* value=> [4, 6, 9, 7]
扩展
(1)every()是对数组中每一个绑定目标函数,若每一个都符合则返回true;
从迭代开始,如果数组中有一个不满足目标函数,就不会继续迭代下去了。
var arr = [4,5,2,3,7];
var temp = arr.every(function(vaule,index,array){
console.log("==*== vaule,index,arrary=>",vaule,index,array);
return vaule > 4;
});
console.log("==*== temp=>",temp);
输出:
(2)some()是对数组中每一个绑定目标函数,若有一个都符合则返回true;
从迭代开始,如果数组中有一个满足目标函数,就不会继续迭代下去了。
var arr = [4,5,2,3,7];
var temp = arr.some(function(vaule,index,array){
console.log("==*== vaule,index,arrary=>",vaule,index,array);
return vaule > 4;
});
console.log("==*== temp=>",temp);
输出:
(3)reduce方法
用处1:数组去重(初始化一个空数组,判断下一个元素是否在当前数组中,不存在则添加到当前数组中)
// 数组去重
var arr = [12, 34, 34, 342, 345, 34, 123, 345, 45, 12]
var newArr = arr.reduce(function (prev, next) {
prev.indexOf(next) == -1 && prev.push(next)
return prev
}, [])
console.log(arr) // [12, 34, 34, 342, 345, 34, 123, 345, 45, 12]
console.log(newArr) // [12, 34, 342, 345, 123, 45]
用处2:数组求和(将0当做reduce回调函数中的初始值,然后依次累加)
// 数组求和
var arr = [1, 2, 3, 4, 5]
var total = arr.reduce(function (prev, next) {
return prev + next
}, 0)
console.log(total)
用处3:(求数组中最大值或最小值)
// 获取数组中最大值
var arr = [134798, 3478973, 12, 345, 355, 425, 1342356, 3425566, 7908798]
var max = arr.reduce(function (prev, next) {
return Math.max(prev, next) // Math.min(prev, next)
}, 0)
console.log(max)