首页 > 编程语言 > 详细

js 判断一个数组是否以另一个数组结束

时间:2021-04-03 19:53:57      阅读:14      评论:0      收藏:0      [点我收藏+]

想法以及测试

现在需要一个函数,判断一个小数组是不是在另一个大数组的末尾,或者说大数组是否包含了小数组,并且是以小数组结束的。然后返回小数组在大数组中的起始索引(其实就是在末尾了,大减小)。

// 第一种方法:将数组转为字符串,用正则验证
function isInLast(smallArr, bigArr) {
    const smallStr = smallArr.toString();
    const bigStr = bigArr.toString();

    const reg = new RegExp(smallStr + "$");
    if (!reg.test(bigStr)) return -1;

    return bigArr.length - smallArr.length;
}

// 第二种方法:翻转一下数组,以小数组为基准,从0开始进行遍历验证
function isInLast2(smallArr, bigArr) {
    smallArr.reverse();
    bigArr.reverse();

    for (let i; i < smallArr.length; i++) {
        if (smallArr[i] != bigArr[i]) return -1;
    }

    smallArr.reverse();
    bigArr.reverse();
    return bigArr.length - smallArr.length;
}

// 第三种方法:第二种方法的稍微变形,不翻转数组
function isInLast3(smallArr, bigArr) {
    const diff = bigArr.length - smallArr.length;
    for (let i; i < smallArr.length; i++) {
        if (smallArr[i] != bigArr[diff + i]) return -1;
    }

    return diff ;
}

var a = [1, 2, 3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1,3, 1, 4, 1, 2, 3];
var b = [1, 2, 3];

// 测试
console.log("isInLast", isInLast(b, a));
console.log("isInLast2", isInLast2(b, a));
console.log("isInLast3", isInLast3(b, a));

// 效率测试
var testNum = 1000000;
console.time(‘test-isInLast‘);
for (let i = 0; i < testNum; i++) {
    isInLast(b, a);
}
console.timeEnd(‘test-isInLast‘);
console.time(‘test-isInLast2‘);
for (let i = 0; i < testNum; i++) {
    isInLast2(b, a);
}
console.timeEnd(‘test-isInLast2‘);
console.time(‘test-isInLast3‘);
for (let i = 0; i < testNum; i++) {
    isInLast2(b, a);
}
console.timeEnd(‘test-isInLast3‘);

结果:
技术分享图片
看来还是遍历的效率高,而且方法二、三不分伯仲。

也测试过使用 slice() 复制数组而不进行两次 reverse(),发现两次 reverse() 效率明显更高。

js 判断一个数组是否以另一个数组结束

原文:https://www.cnblogs.com/ercilan/p/14613626.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!