第二十三天2019-01-23

js 常用数组方法小结

碎碎念

今天这个数组对象操作写的有点多啊,特此来小结一下,一些常用的方法的基本操作。


Array.prototype.filter()

表格过滤用的比较多

大概用法就是过滤数组或者数组集合中一些不符合条件的数组元素和集合。也可以用来过滤数组中一些undefined和null。
例子:[1]

const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

/**
* Array filters items based on search criteria (query)
*/
const filterItems = (query) => {
return fruits.filter((el) =>
// 过滤的条件
el.toLowerCase().indexOf(query.toLowerCase()) > -1
);
}
// 根据条件过滤之后的数组
console.log(filterItems('ap')); // ['apple', 'grapes']
console.log(filterItems('an')); // ['banana', 'mango', 'orange']

过滤数组中空值

let newArray = oldArray.filter(s => s.value != null)

filter() 的实现

  • 利用for循环以及push构造数组[1]
    // Polyfill Array.prototype.filter()
    function newFilter() {
    if (!Array.prototype.newFilter) {
    // 可以带thisArg
    Array.prototype.newFilter = (fun /* , thisArg*/) => {
    // void(0)(等同于void 0) 差不多等于 undefined
    if (this === void 0 || this === null) {
    throw new TypeError()
    }
    // Object构造函数为给定值创建一个对象包装器
    let t = Object(this)
    // 所有非数值转换成0, 所有大于等于 0 等数取整数部分
    // Shifts a in binary representation b (< 32) bits to the right, discarding bits shifted off, and shifting in 0s from the left.
    let len = t.length >>> 0
    if (typeof fun !== 'function') {
    throw new TypeError()
    }
    let res = []
    // arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性
    // 没有 pop 方法。但是它可以被转换为一个真正的Array:args = Array.from(arguments)
    // 所以这个地方用arguments可能有错?
    let thisArg = arguments.length >= 2 ? arguments[1] : void 0
    // t = Object(this)
    for (let i = 0; i< len; i++) {
    // prop in object, 检查object(或其原型链)是否包含具有指定名称的属性的对象
    if (i in t) {
    let val = t[i]
    // NOTE: Technically this should Object.defineProperty at
    // the next index, as push can be affected by
    // properties on Object.prototype and Array.prototype.
    // But that method's new, and collisions should be
    // rare, so use the more-compatible alternative.
    // 满足filter中的条件的话就push进数组res,filter回调函数的三个参数:元素值,元素索引,原数组
    // thisArg: 当前在数组中处理的元素
    // val: 正在处理元素在数组中的索引
    if (fun.call(thisArg, val, i, t))
    res.push(val)
    }
    }
    }
    }
    }

Array.prototype.reduce()

鸽到下期再讲吧,好像我已经鸽了很多东西了。额。
–end–

文章作者: lmislm
文章链接: http://lmislm.com/2019/01/23/2019-01-23/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog