Câu hỏi này có thể quá giống với câu hỏi này tôi đã hỏi vài giờ trước, nhưng vấn đề tôi đang gặp phải thực sự phức tạp hơn tôi nghĩ ban đầu. Tôi đã không nhận thức được thực tế rằng không có hai đối tượng nào có thể được coi là giống nhau trong JavaScript ngay cả khi hai đối tượng có cùng một tập hợp các thuộc tính và giá trị.
Tôi có hai mảng các đối tượng như thế này trong JavaScript.
var from = [
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "beijing", country: "china"},
{city: "new york", country: "usa"}
];
var to = [
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "toronto", country: "canada"}
];
Điều tôi muốn làm là kiểm tra xem bất kỳ đối tượng nào trong mảng "từ" "đã ở trong mảng" đến "và đẩy đối tượng vào mảng" đến "chỉ khi nó không nằm trong mảng" đến "và Tôi chỉ muốn thêm một đối tượng từ mảng "từ" "đến mảng" đến "ngay cả khi có các đối tượng khác trong mảng" từ "không có trong mảng" đến ". Nói cách khác, tôi muốn thoát ra khỏi một vòng lặp ngay khi một đối tượng được đẩy đến mảng "đến".
Cuối cùng, tôi muốn mảng "to" trông như thế này.
var target = {
{city: "seoul", country: "korea"},
{city: "tokyo", country: "japan"},
{city: "toronto", country: "canada"},
{city: "beijing", country: "china"}
};
Đây là một chức năng mà tôi đã đưa ra để đạt được hiệu ứng này.
function ruthere [source, target] {
for [var i = 0; i < target.length; i++] {
for [var j = 0; j < source.length; j++] {
if [target[i].city == source[j].city] {
console.log["Already there"];
} else {
target.push[source[j]];
i = target.length-1;
break;
}
}
}
}
Điều này là theo như tôi đã đạt được kết quả mà tôi muốn, nhưng điều này vẫn không làm những gì tôi muốn.
*Chỉnh sửa: Tôi chỉ cần kiểm tra xem giá trị của thuộc tính tên của đối tượng có giống nhau không. Giá trị của tài sản quốc gia không phải giống nhau.
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]
Giải pháp trên tìm thấy và trả về các phần tử trùng lặp bằng phương thức has []. Điều này hoạt động hiệu quả hơn so với phương thức trước vì mỗi giá trị trong tập hợp phải là duy nhất.
Sử dụng các cặp đối tượng & giá trị khóa
Trong JavaScript, một đối tượng bao gồm các cặp giá trị khóa trong đó các khóa tương tự như các chỉ mục trong một mảng và là duy nhất. Nếu một người cố gắng thêm một khóa trùng lặp với một giá trị khác, thì giá trị trước đó cho khóa đó bị ghi đè bởi giá trị mới. Chúng tôi sử dụng khái niệm này để so sánh và tìm các bản sao.
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 '];
}
}
Điều này có thể được sử dụng khi bạn lo ngại những yếu tố chính xác có bản sao
Sử dụng chức năng "Một số"
Trong JavaScript, một số chức năng của một số người Viking kiểm tra một điều kiện trên tất cả các phần tử của một mảng và trả về đúng nếu bất kỳ phần tử mảng nào thỏa mãn điều kiện đó.
Trong hàm gọi lại đối số, chúng tôi có được phần tử mảng hiện tại là đối số đầu tiên và chỉ mục của phần tử hiện tại là đối số thứ hai.
Sau đó, chúng ta có thể so sánh chỉ số phần tử hiện tại với chỉ mục của phần tử đầu tiên với cùng một giá trị. Nếu cả hai chỉ số đều giống nhau, điều đó ngụ ý rằng không có yếu tố trùng lặp.
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 '];
}
}