
JS数组如何实现去重的四种方法
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
最常用的方法是采用两个嵌套的循环结构。
定义一个数组ary初始化为[1,2,3,3,2,3,4,5]。
使用嵌套循环遍历每个元素i。
在内层循环中继续检查后续的每一个j。
如果当前元素和下一个相同,则删除第i个元素并调整索引以避免越界。
最后显示结果数组。
var ary = [1, 2, 3, 3, 2, 3, 4, 5]; // 将ary被赋值为一个包含元素的数组
var ary1 = []; // 被初始化为空数组
for (let currentIndex = 0; currentIndex < ary.length; currentIndex++) { // 使用更详细的变量命名并改变循环结构表达方式
const currentElement = ary[currentIndex]; // 引用当前索引处的元素
if (!ary1.includes(currentElement)) { // 使用includes方法检查是否存在重复项
ary1.push(currentElement); // 将唯一项添加到新数组中
}
}
在scripting语言中,去重操作是一项较为普遍的操作方式,在处理数据集合时尤为常见。以下将对实现JavaScript数组去重的四种方法进行详细阐述。该方法借助双重循环结构来完成任务。外层循环依次访问数组中的每一个元素。内层循环的目的是比较当前元素与其他后续元素是否存在一致性。当检测到存在相同值时,将该重复项通过`splice()`函数进行删除处理。需要注意的是,在移除一个元素后,由于数组长度会发生变化,因此在完成一次删减操作后需要将外层循环的索引减一,以避免遗漏下一个相邻元素。```javascript
var ary = [1, 2, 3, 3, 2, 3, 4, 5];
for (var i = 0; i < ary.length; i++) {
for (var j = i + 1; j < ary.length; j++) {
if (ary[i] === ary[j]) {
ary.splice(i, 1);
i--;
}
}
}
alert(ary);
```这种方法通过新数组 ary1 来存储唯一元素。该过程遍历原始数组 ary 中的每个元素,并将不在 ary1 中出现的元素加入 ary1。此方法依赖 indexOf() 函数,当返回 -1 时表明目标元素在目标数组中不存在。以下是具体的代码:```javascript
var ary = [1, 2, 3, 3, 2, 3, 4, 5];
var ary1 = [];
for (var i = 0; i < ary.length; i++) {
if (ary1.indexOf(ary[i]) == -1) {
ary1.push(ary[i]);
}
}
alert(ary1);
```该方法通过构造一个实例obj并利用其键值对来记录数组元素的出现频率。遍历数组时,若遇到已存在的元素则递增计数,否则将其作为新键赋值1。将对象的所有键整合到新数组ary中,并附有相应的频次数据。具体实现代码如下:```javascript
var ary = [1, 2, 3, 3, 2, 3, 4, 5];
var obj = {};
for (var i = 0; i < ary.length; i++) {
var cur = ary[i];
if (obj[cur]) {
obj[cur]++;
} else {
obj[cur] = 1;
}
}
var ary = [];
for (var attr in obj) {
ary.push(attr);
}
alert(ary);
```
该算法首先运用`sort()`函数对手动排序,将元素按递增顺序组织。接着,在处理排好序的序列时,若发现相邻项完全一致,则调用`splice()`函数去除多余的项。该策略特别适合于能够进行元素比较的情景。以下是具体的代码:
```javascript
var ary = [1, 2, 3, 3, 2, 3, 4, 5];
ary.sort(function(a, b) { return a - b; });
for (var i = 0; i < ary.length; i++) {
if (ary[i] === ary[i + 1]) {
ary.splice(i, 1);
i--;
}
}
alert(ary);
```这四种方案均存在各自的利弊。其中双重循环法虽然直接易懂,但计算开销较大;新数组法和对象记录次数法普遍适用性较强且效率较高;而排序算法仅适用于具有可比较性的元素类型,具体应用中需依据具体场景的需求和性能考量来决定使用哪种方案。
全部评论 (0)


