每日打卡(二):lodash.js => _.compact + _.concat + _.difference

96 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第一天,点击查看活动详情

_.compact(array)

概念

创建一个新数组,包含原数组中所有的非假值元素。例如falsenull,0""undefined, 和 NaN 都是被认为是“假值”。

参数

  1. 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与任何数组 或 值连接在一起。

参数

  1. array  (Array) : 被连接的数组。
  2. [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,这个方法会返回一个新数组。

参数

  1. array  (Array) : 要检查的数组。
  2. [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 
}

核心为:数组filter方法和indexOf方法