手写常用的工具类函数

手写常用的工具类函数

1. 防抖函数

function debounce(fun, time) {
    let timeout = null
    let timer = time || 500
    return function () {
        clearTimeout(timeout)
        let args = arguments
        let that = this
        timeout = setTimeout(function () {
            fun.apply(that, args)
        }, timer)
    }
}

2. 节流函数

function throttle(fun, time) {
    if (time === null || time === undefined) {
        time = 1000
    }
    let lastTime = null;
    return function () {
        let newTime = +new Date()
        if (newTime - lastTime > time || !lastTime) {
            fun.apply(this, arguments)
            lastTime = newTime
        }
    }
}

3. 数组去重

1. 使用indexof()
let arr = [1, 1, 1, 1, 2, 3, 3, 4, 5]
let arr1 = []
arr.forEach(item => {
    if (arr1.indexOf(item) === -1) {
        arr1.push(item)
    }
})
console.log(arr1)

2. 使用reduce()
let arr = [1, 2, 3, 4, 5, 4, 2, 3, 6, 7, 2]
let obj = {}
let arr1 = arr.reduce((pre, cur) => {
    if(obj[cur]) {
        return pre
    }else {
      obj[cur] = true
      pre.push(cur)
      return pre
    }
}, [])
console.log(arr1)

3. 使用set
let arr = [1, 2, 3, 4, 5, 4, 2, 3, 6, 7, 2]
let arr1 = [...new Set(arr)]
console.log(arr1)

4. 使用filter()
let arr = [1, 2, 3, 4, 2, 3, 4, 2, 1, 5, 9, 6, 8, 7];
let newArr = arr.filter((item, index, array) => array.indexOf(item) === index);
console.log(newArr)

4. 手写深拷贝

let arr = [1, 2, 3, 4, [5, 6, 7, [8, 9]]]
function deepClone(val) {
    if (typeof val !== 'object' || val === null) {
        return val
    }
    let result = Array.isArray(val) ? [] : {} // 判断是否是数组
    for (let i in val) {
        if (val.hasOwnProperty(i)) { // 保证i不是原型上的属性
            result[i] = deepClone(val[i])
        }
    }
    return result
}
let arr1 = deepClone(arr)
arr1[4][0] = 10
console.log(arr, arr1)

5. 多维数组扁平化

// 1. 使用es6的flat()
const arr=[1, 2, [3, [4, 5]]]
arr.flat(Infinity)
//[1,2,3,4,5]

// 2. 使用 JSON.stringify().replace()
const arr=[1,2,[3,4,[5,6,7]]];
let res=JSON.stringify(arr).replace(/\[|\]/g,'');
res=JSON.parse(`[${res}]`)
console.log(res)
//[1, 2, 3, 4, 5, 6, 7]

// 使用reduce()
function flatten(arr) {
    return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
    }, [])
}

6. 手写instanceof

function myInstanceof(obj, constructor) {
    // 判断传入参数是否为对象
    if (typeof obj !== 'object' || obj === null) {
        return false;
    }

    // 获取对象的原型
    let proto = Object.getPrototypeOf(obj);

    // 循环判断原型链
    while (proto !== null) {
        // 判断原型是否等于指定构造函数的原型
        if (proto === constructor.prototype) {
            return true;
        }
        // 沿着原型链继续向上查找
        proto = Object.getPrototypeOf(proto);
    }

    return false;
}

// 测试
function Person(
) {}
const person = new Person();
console.log(myInstanceof(person, Person)); // true

const obj = {};
console.log(myInstanceof(obj, Person)); // false
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PyTorch对MNIST手写数字图像进行分类,你可以按照以下步骤进行操作: 1. 首先,使用PyTorch定义ResNet50网络模型。ResNet50是一种深度卷积神经网络,适用于图像分类任务。 2. 接下来,使用PyTorch加载MNIST数据集。PyTorch提供了方便的数据加载工具,你可以使用torchvision.datasets.MNIST函数加载MNIST数据集。如果是第一次运行代码,PyTorch会自动下载数据集。 3. 在加载数据集之后,你可以对数据进行一些预处理操作。例如,可以使用torchvision.transforms.Compose函数将多个转换操作组合在一起,比如将图像转换为Tensor,并进行标准化。 4. 接着,你可以创建训练数据加载器和测试数据加载器。可以使用torch.utils.data.DataLoader函数来创建数据加载器。训练数据加载器用于训练模型,测试数据加载器用于评估模型的性能。你可以指定批量大小、是否打乱数据等参数。 5. 然后,你可以使用定义好的网络模型、数据加载器和损失函数,进行训练过程。训练过程中,可以使用优化器(如SGD或Adam)来更新模型的参数,并计算损失值。训练过程中可以显示损失值的变化情况。 总结起来,对于MNIST手写数字图像分类的PyTorch代码,你需要定义ResNet50网络模型,加载MNIST数据集,进行数据预处理,创建训练和测试数据加载器,并进行训练过程。 请注意,上述步骤只是一个大致的框架,具体的代码实现可能会有所不同。你可以根据自己的需求和实际情况对代码进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Resnet50卷积神经网络训练MNIST手写数字图像分类 Pytorch训练代码](https://download.csdn.net/download/baidu_36499789/87418795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [用PyTorch实现MNIST手写数字识别(非常详细)](https://blog.csdn.net/sxf1061700625/article/details/105870851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值