在数组Array原型上添加padStart()和padEnd()

最近使用vue 写项目,每当需要数组管理一组当前的选中状态的时候,就会使用循环初始一个数组。 想到了String 上的 padStart 可以填充字符串。因为数组的fill()方法是浅拷贝,所以就模拟了padStart()padEnd()。 不完善之处谢谢指出

/**
 * 补全数组长度的功能 如果某个数组不够指定长度,会在头部补全
 * @param { Number } length 
 * @param { * } element 
 * @return 补全后的数组
 * 示例: [].padStart(Number, element = '')
 */
if(!Array.prototype.padStart) {
    Object.defineProperty(Array.prototype, 'padStart', {
        value: function (length, element) {
            // length is Number
            if(!Number(length) && Number(length) != 0) throw new Error(`${length} is not Number`)
            // init
            let ary = this;
            let len = length - this.length;
            // add elements
            for(let i = 0; i < len; i ++ ) {
                if(element instanceof Array) {
                    ary.unshift([...element])
                }else if(element instanceof Object) {
                    ary.unshift({...element})
                }else{
                    ary.unshift( element || '')
                }
            }
            return ary
        }
    })
}
/**
 * 补全数组长度的功能 如果某个数组不够指定长度,会在尾部补全
 * @param { Number } length 
 * @param { * } element 
 * @return 补全后的数组
 * 示例: [].padEnd(Number, element = '')
 */
if(!Array.prototype.padEnd) {
    Object.defineProperty(Array.prototype, 'padEnd' , {
        value: function (length,element) {
            // length is Number
            if(!Number(length) && Number(length) != 0) throw new Error(`${length} is not Number`)
            // init
            let ary = this;
            let len = length - this.length;
            // add elements
            for(let i = 0; i < len; i ++ ) {
                if(element instanceof Array) {
                    ary.push([...element])
                }else if(element instanceof Object) {
                    ary.push({...element})
                }else{
                    ary.push( element || '')
                }
            }
            return ary
        }
    })
}

示例:

let state = [].padStart(3,{checked:false})
console.log(state) // [{checked:false},{checked:false},{checked:false}]
//改变一下
state[1].checked = true
console.log(state) // [{checked:false},{checked:true},{checked:false}]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值