js 查找数组中不相同的值
时间: 2023-12-01 16:03:39 浏览: 66
可以通过两次循环遍历数组,比较每个元素是否与其他元素相同,来找出不相同的值。但是这种方法的时间复杂度为 O(n^2),当数组很大时效率较低。
更高效的方法是使用对象来记录每个元素出现的次数,然后再遍历一次数组,找出只出现过一次的元素。具体实现如下:
```javascript
function findUnique(arr) {
let obj = {};
// 统计每个元素出现的次数
for (let i = 0; i < arr.length; i++) {
if (obj[arr[i]]) {
obj[arr[i]]++;
} else {
obj[arr[i]] = 1;
}
}
// 找出只出现过一次的元素
let res = [];
for (let key in obj) {
if (obj[key] === 1) {
res.push(Number(key));
}
}
return res;
}
```
这个方法的时间复杂度为 O(n),比两次循环的方法效率高很多。
相关问题
js查找数组对象中的值
你可以使用 JavaScript 的 `Array.prototype.find()` 方法来查找数组对象中的值。这个方法接受一个函数作为参数,这个函数用来判断数组中的每个元素是否符合要求。如果符合要求,`find()` 方法就会返回该元素,否则返回 `undefined`。
例如,假设你有一个数组对象,其中每个元素都有一个 `id` 属性,你想要查找 `id` 为 2 的元素,你可以这样写:
```javascript
const arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
const result = arr.find(item => item.id === 2);
console.log(result); // { id: 2, name: 'Bob' }
```
这个例子中,`find()` 方法会依次遍历数组中的每个元素,将其传递给函数 `item => item.id === 2` 进行判断。当判断条件 `item.id === 2` 成立时,`find()` 方法就会返回该元素,即 `{ id: 2, name: 'Bob' }`。如果数组中没有符合条件的元素,`find()` 方法就会返回 `undefined`。
js去重数组中对象相同的值
在JavaScript中,可以使用reduce()和findIndex()方法来去除数组中对象相同的值。首先,通过reduce()方法遍历整个数组,将每个对象的属性值合并为一个字符串,然后使用findIndex()方法在新数组中查找是否已经存在相同字符串。如果没有找到,则将该字符串添加到新数组中,否则忽略该对象。
以下是一个示例代码:
```
const arr = [{ id: 1, name: 'apple' }, { id: 2, name: 'banana' }, { id: 1, name: 'apple' }];
const result = arr.reduce((acc, cur) => {
const stringified = JSON.stringify(cur); // 将对象转换为字符串
const exists = acc.findIndex(item => JSON.stringify(item) === stringified); // 判断是否已存在
if (exists === -1) {
acc.push(cur);
}
return acc;
}, []);
console.log(result); // [{ id: 1, name: 'apple' }, { id: 2, name: 'banana' }]
```
在上面的代码中,我们使用JSON.stringify()将每个对象转换为字符串,以便后续比较。然后使用findIndex()方法,在新数组中查找是否已包含相同的字符串。如果已经存在相同的字符串,则返回该元素所在的位置,否则返回-1。最后,如果该元素不存在,则将其添加到新数组中。最后,返回新数组即可。
该方法可以很好地去除数组中对象相同的值,并返回一个去重后的新数组。
阅读全文