开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第一天,点击查看活动详情
_.compact(array)
概念
创建一个新数组,包含原数组中所有的非假值元素。例如
false,null,0,"",undefined, 和NaN都是被认为是“假值”。
参数
array(Array) : 待处理的数组
返回值
(Array) : 返回过滤掉假值的新数组。
例子
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
手写实现
function myCompact(arr) {
if(arr.length <= 0 ) return // 不为空数组
let res = arr.filter((i) => { // filter 过滤假值
if(i) return true // 判断是否为假值
})
return res
}
核心为:数组filter方法以及假值判断
_.concat(array, [values])
概念
创建一个新数组,将
array与任何数组 或 值连接在一起。
参数
array(Array) : 被连接的数组。[values](...)* : 连接的值。
返回值
(Array) : 返回连接后的新数组。
例子
var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
console.log(other);
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
手写实现
function myConcat(...arr) {
let newArr = [] // 存放连接后的数组
let res = newArr.concat(arr).flat(1) // concat连接数组 flat 降级去掉一级[]
return res
}
核心为: 数组concat方法和ES6解构赋值
_.difference(array, [values])
概念
创建一个具有唯一
array值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array参数)排除了给定数组中的值。)该方法使用SameValueZero做相等比较。结果值的顺序是由第一个数组中的顺序确定。
注意: 不像_.pullAll,这个方法会返回一个新数组。
参数
array(Array) : 要检查的数组。[values](...Array) : 排除的值。
返回值
(Array) : 返回一个过滤值后的新数组。
例子
_.difference([3, 2, 1], [4, 2]);
// => [3, 1]
手写实现
function myDifference(arr,tar) {
if(arr.length <= 0 && tar.length <= 0) return // 原数组和目标值数组均不为空
let res = arr.filter((i) => {
if(tar.indexOf(i) == -1) return true // 判断目标数组与原数组是否有相同的值,返回原数组里不相等的值
})
return res
}