js将字符串数组去重
时间: 2024-10-18 16:01:26 浏览: 38
在JavaScript中,要去除字符串数组的重复项,有多种方法。这里提供一种常见的简洁做法,利用ES6的新特性——Set和Spread运算符(`...`):
```javascript
function removeDuplicates(array) {
return [...new Set(array)];
}
let stringArray = ['a', 'b', 'c', 'd', 'a', 'e', 'c'];
let uniqueStringArray = removeDuplicates(stringArray);
console.log(uniqueStringArray); // 输出:['a', 'b', 'c', 'd', 'e']
```
在这个例子中,我们创建了一个新的Set对象,Set会自动去除其中的重复元素。然后使用`...`运算符将Set转换回数组。这样就得到了一个没有重复元素的数组。
如果你想保留原数组不变,可以返回一个新的数组:
```javascript
stringArray = stringArray.filter((value, index, self) => self.indexOf(value) === index);
```
这种方法是遍历数组,对于每一个元素,只有当它第一次出现时才保留。`self.indexOf(value)`会查找元素在数组中首次出现的位置,等于索引则说明该元素是第一次出现。
相关问题
js包含对象的数组去重
JavaScript中有多种方法可以对包含对象的数组进行去重,因为默认情况下,由于每个对象引用都是唯一的,即使它们的属性值完全相同,也视为不同的元素。以下是几种常见的去重技巧:
1. 使用`Set`数据结构:Set只允许存储唯一的值,因此将数组转换为Set,然后再转回数组即可实现去重。
```javascript
let arr = [{ id: 1 }, { id: 1 }, { id: 2 }];
let uniqueArr = [...new Set(arr)];
```
2. 利用JSON.stringify()序列化对象:这种方法适用于所有属性值都是基本类型的对象,通过比较字符串形式是否相同来进行去重。
```javascript
let arr = [{ id: 1 }, { id: 1 }, { id: 2 }];
let uniqueArr = arr.filter((item, index, self) => JSON.stringify(item) !== JSON.stringify(self[index - 1]));
```
注意,这种方法不适用于嵌套对象。
3. 自定义去重函数:如果对象有复杂结构,可以创建一个哈希表或者使用递归遍历对象的属性进行判断。
```javascript
function isDuplicate(obj, hash = new Map()) {
let key = JSON.stringify(obj);
return hash.has(key) ? true : (hash.set(key, obj), false);
}
let arr = [{ id: 1, name: 'a' }, { id: 1, name: 'b' }, { id: 2 }];
let uniqueArr = arr.filter(isDuplicate);
```
JS中的对象数组去重
在JavaScript中,对象数组去重可以根据对象的某个属性值来进行,因为每个对象都是独立的引用,所以直接比较对象是否相等通常不会去除重。以下是几种常见的方法:
1. **基于属性值哈希表**:
- 使用Set数据结构,它不允许有重复元素,可以将对象的属性值作为键入Set中,然后再转回数组。
```javascript
function uniqueObjects(arr, key) {
return [...new Set(arr.map(obj => obj[key]))];
}
```
这里`key`是你想要用作唯一标识的属性名。
2. **自定义比较函数**:
如果对象的属性值不是简单类型,你可以提供一个比较函数,该函数返回两个对象是否被视为相同的依据。
```javascript
function uniqueObjects(arr, compareFn) {
let seen = {};
return arr.filter(obj => !seen[obj] && (seen[obj] = compareFn ? compareFn(obj) : obj));
}
```
`compareFn(obj1, obj2)`应该返回true如果obj1和obj2被认为是相同的。
3. **JSON.stringify**:
对象转换为字符串再比较,适用于属性值都是简单类型的对象。
```javascript
function uniqueObjects(arr) {
return [...new Map(arr.map(JSON.stringify).map((str, i) => [str, i])));
}
```
但是这种方法可能会丢失非字符串可序列化的内容。
阅读全文