【JavaScript】深入数组扩展方法并应用

本文介绍了三种JavaScript数组操作:如何反转字符串,实现二分查找算法来在有序数组中寻找指定值并返回索引,以及如何判断一个数组是否是对称数组。提供了不同的函数实现方法和示例代码。

1、字符串反转’123abc‘ -> ‘cba123‘

  let str = "123abc";
  let res = str.split("").reverse().join("");
  console.log(res); // 'cba123'
  /*
     let res1 = str.split('')
     console.log('res1',res1);  // ['1','2','3','a','b','c']
     let res2 = res1.reverse()
     console.log('res2',res2);  // ['c','b','a','3','2','1']
     let res3 = res2.join('');
     console.log('res3',res3);  // 'cba123'
     */

2、在有序的数组里找出指定的值,返回该值在数组中的索引。(二分查找)

var arr = [1, 3, 5, 7, 9, 11, 12, 14, 17, 19];

方法一:

function getIndex(arr,value){
   let len = arr.length;
   for(let i=0;i<len;i++){
       if(arr[i] === value){
           return i;
       }
   }
}
console.log(getIndex(arr,9));

方法二:

function getIndex(arr,value){
            arr.findIndex(function(item,index){
             if(item===value){
                 console.log(index);
             }
            })
        }
getIndex(arr,9);

二分查找

function getIndex(arr, value) {
        var low = 0; //开始的索引值,一上来默认为0
        var high = arr.length - 1; //结束的索引值,一上来默认为最后一个值的索引值
        while (low <= high) {
          var mid = parseInt((low + high) / 2);
          if (value == arr[mid]) {
            // 这个条件成立说明现在已经找到了用户传的那个值了
            return mid; //返回找到数据对应的索引值
          } else if (value < arr[mid]) {
            // 如果用户传的值小于数组中的值,那么需要找到第一个大于等于用户传的值的值
            high = mid - 1;
          } else {
            // 如果用户传的值大于数组中的值,那么需要找到第一个小于等于用户传的值的值
            low = mid + 1;
          }
        }
        return -1;
      }
console.log(getIndex(arr, 17)); // 7

3、判断数组是否为对称数组,对称数组形式如:[1,2,3,4], [1,2,4,3]

var arr1 = [1, 2, 3, 4, 2, 3, 1];
var arr2 = [1, 2, 3, 3, 2, 1];
var arr3 = [1, 2, 3, 1, 2, 3];

方法一:

function symmetry(arr) {
        var newArr = []; //创建一个新的数组
        for (let i = 0; i < arr.length; i++) {
          newArr.push(arr[i]); //将原来的数组拷贝一份
        }
        newArr.reverse(); //倒序

        for (var i = 0; i < arr.length; i++) {
          if (newArr[i] != arr[i]) return false;
        }
  return true;
}
console.log(symmetry(arr3));

方法二:

function symmetry(arr) {
        var low = 0;
        var high = arr.length - 1;

        for (var i = 0; i < arr.length; i++) {
          low++;
          high--;
          if (arr[low] != arr[high]) return false;
        }
        return true;
      }
console.log(symmetry(arr3));

方法三:

function symmetry(arr) {
	var low = 0;
	var high = arr.length - 1;
	while (true) {
      if (low >= high) break;
      if (arr[low] != arr[high]) return false;
    }
    low++;
    high--;
}
console.log(symmetry(arr2));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DomCode

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值