首页 > 其他分享 >写一个方法,批量删除指定索引的数组元素

写一个方法,批量删除指定索引的数组元素

时间:2024-12-13 09:20:15浏览次数:4  
标签:arr 批量 删除 索引 数组 indices Array

/**
 * 批量删除数组中指定索引的元素。
 *
 * @param {Array} arr 原数组
 * @param {Array<number>} indices 要删除的元素的索引数组,必须按升序排列
 * @returns {Array} 删除元素后的新数组,不会修改原数组
 */
function removeElementsAtIndexes(arr, indices) {
  if (!Array.isArray(arr) || !Array.isArray(indices)) {
    throw new TypeError("Both arguments must be arrays.");
  }

  if (!indices.every(Number.isInteger)) {
    throw new TypeError("Indices must be integers.");
  }

  // 判断indices是否有序
  for (let i = 1; i < indices.length; i++) {
    if (indices[i] <= indices[i - 1]) {
      throw new Error("Indices must be sorted in ascending order.");
    }
  }


  const newArr = [];
  let currentIndex = 0;
  let deleteIndex = 0;

  for (let i = 0; i < arr.length; i++) {
    if (deleteIndex < indices.length && i === indices[deleteIndex]) {
      // 跳过要删除的元素
      deleteIndex++;
    } else {
      // 保留的元素添加到新数组
      newArr[currentIndex++] = arr[i];
    }
  }

  return newArr;
}



// 测试用例
const arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

// 删除索引 2, 4 的元素
const indices1 = [2, 4];
const result1 = removeElementsAtIndexes(arr, indices1);
console.log(result1); // Output: ['a', 'b', 'd', 'f', 'g']

// 删除索引 0, 1, 6 的元素
const indices2 = [0, 1, 6];
const result2 = removeElementsAtIndexes(arr, indices2);
console.log(result2); // Output: ['c', 'd', 'e', 'f']


//  indices 非法输入的测试用例

// indices 不是数组
console.log(removeElementsAtIndexes(arr, "test")); // Throws TypeError
console.log(removeElementsAtIndexes(arr, 1)); // Throws TypeError

// indices 元素不是整数
console.log(removeElementsAtIndexes(arr, [1, 2.5])); // Throws TypeError

// indices 不是升序
console.log(removeElementsAtIndexes(arr, [2, 1])); // Throws Error


// 空数组和空索引的测试用例
console.log(removeElementsAtIndexes([], []));  // Output: []
console.log(removeElementsAtIndexes(arr, [])); // Output: ['a', 'b', 'c', 'd', 'e', 'f', 'g'] (same as original array)



这个改进的版本包含了以下几点:

  • 错误处理: 增加了对非法输入(arrindices 不是数组,indices 包含非整数,indices 不是升序)的处理,并抛出相应的错误信息。
  • 类型检查: 使用 Array.isArray()Number.isInteger() 进行更严格的类型检查。
  • 效率: 使用一个 deleteIndex 变量来跟踪要删除的索引,避免了不必要的循环或数组操作,提高了效率,尤其是在要删除的元素较多时。
  • 清晰的注释: 添加了更详细的注释,解释函数的功能、参数和返回值。
  • 全面的测试用例: 添加了更多的测试用例,覆盖了各种情况,包括非法输入、空数组、空索引等。

这个版本更加健壮、高效,并且更容易理解和使用。

标签:arr,批量,删除,索引,数组,indices,Array
From: https://www.cnblogs.com/ai888/p/18604148

相关文章

  • AI批量剪辑助手视频批量自动剪辑软件
    批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包。b.......
  • AI批量剪辑助手视频批量自动剪辑软件
    批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包。b.......
  • AI批量剪辑助手视频批量自动剪辑软件
    批量剪辑助手是一款视频批量自动剪辑软件,具有智能化、批量化、操作简单等特点。该软件适用于自动化处理和生产视频,旨在帮助用户实现批量化生产产品推广视频的功能。三、安装与配置安装步骤:下载程序压缩包:访问官方网站或指定下载地址,下载小咖批量剪辑助手程序压缩包。b.......
  • 【MySQL 进阶之路】索引失效的11种情况
    MySQL进阶之路:索引失效的11种情况在MySQL的查询优化中,索引是一项至关重要的技术,它能够大大提升数据检索的效率。本文将讨论这11种常见情况,帮助开发者更好地理解索引的使用及优化。图示1.使用不等式操作符(!=,<,>)例子:SELECT*FROMusersWHEREage!=30;原理:索......
  • C语言数组
    目录数组的初始化数组的引用二维数组二维数组的初始化二维数组的引用在C语言中,数组它可以存储一系列相同类型的数据,数组中的每个元素都有一个索引,索引通常从0开始,定义数组会分配内存,数组名表示内存的首地址;数组的初始化Inta[5]={1,2,3,4,5};这个元素是1,2,3,4,5这......
  • 华为机试HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序
    首先看一下题描述输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1≤n≤1000  ,元素大小满足 0≤val≤100000 输入描述:第一行输入数组元素个数第二行输入待排序的数组,每个数用空格隔开第三行输入一个整数0或1。0代表升序排序,1代表降序排序输出......
  • 数字组合转字母&删除二叉树节点&字符串相乘&打家劫舍ii&无序数组第k大 &无序数组前k大
    一、数字串转换为字符串1-26个数字分别代表26个字符(A-z)输入"12326〞就可以拆分为【1,2,3,2,6】、(12,3,2,6].[1,23,2,6]【1,23,26】、【12,3,26】等,将每种组合转成成对应字母输出,输出所有可能的结果返回所有可能的转换结果//将数字串转换成字母串//将数字串转换成字母......
  • testng配置文件-批量执行
    testng.xml与pom.xml同级(右键文件运行)@Parameters(value={"username","password"})//测试用例注解引用参数<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsuiteSYSTEM"``http://testng.org/testng-1.0.dtd``">&......
  • MySQL原理解析:MySQL的索引结构为什么使用B+树?
    前言在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。一、二叉查找树(BST):不平衡二叉查找树(BST,BinarySearchTree......
  • C语言基础:数组(一维数组)
    引例如果我们要在程序中表示一个学生的成绩,我们会使用一个int来表示,如:intscore。假如我们要在程序中表示一组成绩,此时我们所学的常规的数据类型就无法再表示,这个时候我们就需要使用到一种新的表现形式,这种表现形式就是我们的数组。什么是数组数组是相同类型,有序数据的集合......