Để biết liệu mảng đơn giản có trùng lặp không, chúng ta có thể so sánh các chỉ mục đầu tiên và cuối cùng của cùng một giá trị:
Chức năng:
var hasDupsSimple = function[array] {
return array.some[function[value] { // .some will break as soon as duplicate found [no need to itterate over all array]
return array.indexOf[value] !== array.lastIndexOf[value]; // comparing first and last indexes of the same value
}]
}
Tests:
hasDupsSimple[[1,2,3,4,2,7]]
// => true
hasDupsSimple[[1,2,3,4,8,7]]
// => false
hasDupsSimple[[1,"hello",3,"bye","hello",7]]
// => true
Đối với một mảng các đối tượng, chúng ta cần chuyển đổi các giá trị đối tượng thành một mảng đơn giản trước:
Chuyển đổi mảng các đối tượng thành mảng đơn giản với
hasDupsSimple[[1,2,3,4,2,7]]
// => true
hasDupsSimple[[1,2,3,4,8,7]]
// => false
hasDupsSimple[[1,"hello",3,"bye","hello",7]]
// => true
0:var hasDupsObjects = function[array] {
return array.map[function[value] {
return value.suit + value.rank
}].some[function[value, index, array] {
return array.indexOf[value] !== array.lastIndexOf[value];
}]
}
Tests:
var cardHand = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"three" },
]
hasDupsObjects[cardHand];
// => false
var cardHand2 = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"ten" },
]
hasDupsObjects[cardHand2];
// => true
Trong bài viết này, chúng ta sẽ xem xét các phương pháp khác nhau để tìm bản sao trong một mảng. Một số phương pháp này chỉ đếm số lượng các yếu tố trùng lặp trong khi các phương pháp khác cũng cho chúng ta biết yếu tố nào đang lặp lại và một số làm cả hai. Theo đó, bạn có thể chọn cái tốt nhất cho trường hợp sử dụng của bạn.
Mục lục
- Sử dụng phương thức indexof []
- Sử dụng phương thức HAVE []
- Sử dụng một cặp đối tượng & giá trị khóa
- Sử dụng chức năng "Một số"
- Sử dụng lặp lại
Sử dụng phương thức indexof []
Sử dụng phương thức HAVE []
Sử dụng một cặp đối tượng & giá trị khóa
const arry = [1, 2, 1, 3, 4, 3, 5];
const toFindDuplicates = arry => arry.filter[[item, index] => arr.indexOf[item] !== index]
const duplicateElementa = tofindDuplicates[arry];
console.log[duplicateElements];
// Output: [1, 3]
Sử dụng phương thức HAVE []
Sử dụng một cặp đối tượng & giá trị khóa
function toFindDuplicates[arry] {
const uniqueElements = new Set[arry];
const filteredElements = arry.filter[item => {
if [uniqueElements.has[item]] {
uniqueElements.delete[item];
} else {
return item;
}
}];
return [...new Set[uniqueElements]]
}
const arry = [1, 2, 1, 3, 4, 3, 5];
const duplicateElements = toFindDuplicates[arry];
console.log[duplicateElements];
// Output: [1, 3]
Sử dụng chức năng "Một số"
Sử dụng lặp lại
Trong phương pháp này, những gì chúng tôi làm là chúng tôi so sánh chỉ số của tất cả các mục của một mảng với chỉ mục của lần đầu tiên số đó xảy ra. Nếu chúng không phù hợp, điều đó ngụ ý rằng phần tử là một bản sao. Tất cả các phần tử như vậy được trả về trong một mảng riêng biệt bằng phương thức Filter [].
toFindDuplicates[];
function toFindDuplicates[] {
let arry = [1, 2, 1, 3, 4, 3, 5];
let toMap = {};
let resultToReturn = false;
for [let i = 0; i < arry.length; i++] {
if [toMap[arry[i]]] {
resultToReturn = true;
// terminate the loop
break;
}
toMap[arr[i]] = true;
}
if [resultToReturn] {
console.log['Duplicate elements exist'
'];
}
else {
console.log['Duplicates don'
t exist '];
}
}
Chúng ta hãy xem xét việc thực hiện điều này bằng cách sử dụng JavaScript
Sử dụng chức năng "Một số"
Sử dụng lặp lại
Trong phương pháp này, những gì chúng tôi làm là chúng tôi so sánh chỉ số của tất cả các mục của một mảng với chỉ mục của lần đầu tiên số đó xảy ra. Nếu chúng không phù hợp, điều đó ngụ ý rằng phần tử là một bản sao. Tất cả các phần tử như vậy được trả về trong một mảng riêng biệt bằng phương thức Filter [].
Chúng ta hãy xem xét việc thực hiện điều này bằng cách sử dụng JavaScript
toFindDuplicates[];
function toFindDuplicates[] {
let arry = [1, 2, 1, 3, 4, 3, 5];
let resultToReturn = false;
// call some function with callback function as argument
resultToReturn = arry.some[[element, index] => {
return arry.indexOf[element] !== index
}];
if [resultToReturn] {
console.log['Duplicate elements exist'
'];
}
else {
console.log['Duplicates don'
t exist '];
}
}
Sử dụng lặp lại
Trong phương pháp này, chúng tôi so sánh từng phần tử của một mảng với tất cả các phần tử khác của mảng để kiểm tra xem hai phần tử có giá trị có giống nhau bằng cách sử dụng lồng nhau cho vòng lặp không.
toFindDuplicates[];
function toFindDuplicates[element, index] {
let arry = [1, 2, 1, 3, 4, 3, 5];
let resultToReturn = false;
for [let i = 0; i < arry.length; i++] { // nested for loop
for [let j = 0; j < arry.length; j++] {
// prevents the element from comparing with itself
if [i !== j] {
// check if elements' values are equal
if [arry[i] === arry[j]] {
// duplicate element present
resultToReturn = true;
// terminate inner loop
break;
}
}
}
// terminate outer loop
if [resultToReturn] {
break;
}
}
f[resultToReturn] {
console.log['Duplicate elements exist'
'];
}
else {
console.log['Duplicates don'
t exist '];
}
}