Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Tôi cần xác định xem một đối tượng đã tồn tại trong một mảng trong JavaScript.

ví dụ: dummycode):

var carBrands = [];

var car1 = {name:'ford'};
var car2 = {name:'lexus'};
var car3 = {name:'maserati'};
var car4 = {name:'ford'};

carBrands.push(car1);
carBrands.push(car2);
carBrands.push(car3);
carBrands.push(car4);

Bây giờ mảng "carbrands" chứa tất cả các trường hợp. Bây giờ tôi đang tìm một giải pháp nhanh để kiểm tra xem một ví dụ của CAR1, CAR2, CAR3 hoặc CAR4 đã ở trong mảng carbrands.

eg:

var contains =  carBrands.Contains(car1); //<--- returns bool.

CAR1 và CAR4 chứa cùng một dữ liệu nhưng là các trường hợp khác nhau mà chúng nên được kiểm tra là không bằng nhau.

Tôi có thêm một cái gì đó giống như một hàm băm vào các đối tượng trên sáng tạo không? Hoặc có một cách nhanh hơn để làm điều này trong JavaScript.

Tôi đang tìm kiếm giải pháp nhanh nhất ở đây, nếu bẩn, vì vậy nó phải được;) trong ứng dụng của tôi, nó phải xử lý khoảng 10000 trường hợp.

Không có jQuery

Đã hỏi ngày 3 tháng 1 năm 2011 lúc 18:16Jan 3, 2011 at 18:16

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Caspar Kleijnecaspar KleijneCaspar Kleijne

21.1K12 Huy hiệu vàng70 Huy hiệu bạc101 Huy hiệu đồng12 gold badges70 silver badges101 bronze badges

3

Sử dụng một cái gì đó như thế này:

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}

Trong trường hợp này,

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
7 là đúng. Xóa cuộc gọi
function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
8 và thay vào đó nó sẽ trả về sai. Nếu sau đó bạn mở rộng sang sử dụng các đối tượng để lưu trữ các đối tượng xe khác này thay vì sử dụng mảng, bạn có thể sử dụng một cái gì đó như thế này: thay vào đó:

function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}

Cách tiếp cận này cũng sẽ hoạt động cho các mảng, nhưng khi được sử dụng trên các mảng, nó sẽ chậm hơn so với tùy chọn đầu tiên.

Đã trả lời ngày 3 tháng 1 năm 2011 lúc 18:26Jan 3, 2011 at 18:26

CDHowieCdhowiecdhowie

150K23 Huy hiệu vàng280 Huy hiệu bạc291 Huy hiệu Đồng23 gold badges280 silver badges291 bronze badges

8

Tại sao bạn không sử dụng phương pháp indexof của mảng javascript?

Kiểm tra điều này: mảng MDN Indexof

Đơn giản là làm:

carBrands.indexOf(car1);

Nó sẽ trả lại cho bạn chỉ mục (vị trí trong mảng) của CAR1. Nó sẽ trả lại -1 nếu CAR1 không được tìm thấy trong mảng.

http://jsfiddle.net/Fraximus/r154cd9o

Chỉnh sửa: Lưu ý rằng trong câu hỏi, các yêu cầu là kiểm tra cùng một đối tượng được tham chiếu trong mảng và không phải là một đối tượng mới. Ngay cả khi đối tượng mới giống hệt nhau trong nội dung với đối tượng trong mảng, nó vẫn là một đối tượng khác. Như đã đề cập trong các bình luận, các đối tượng được truyền bằng tham chiếu trong JS và cùng một đối tượng có thể tồn tại nhiều lần trong nhiều cấu trúc. Nếu bạn muốn tạo một đối tượng mới và kiểm tra xem mảng có chứa các đối tượng giống hệt với người mới của bạn hay không, câu trả lời này sẽ không hoạt động (Fiddle của Julien bên dưới), nếu bạn muốn kiểm tra sự tồn tại của đối tượng đó trong mảng, thì câu trả lời này sẽ làm việc. Kiểm tra các fiddles ở đây và trong các ý kiến. Note that in the question, the requirements are to check for the same object referenced in the array, and NOT a new object. Even if the new object is identical in content to the object in the array, it is still a different object. As mentioned in the comments, objects are passed by reference in JS and the same object can exist multiple times in multiple structures.
If you want to create a new object and check if the array contains objects identical to your new one, this answer won't work (Julien's fiddle below), if you want to check for that same object's existence in the array, then this answer will work. Check out the fiddles here and in the comments.

Đã trả lời ngày 30 tháng 7 năm 2013 lúc 8:25Jul 30, 2013 at 8:25

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

FraxfraxFrax

2.9551 Huy hiệu vàng23 Huy hiệu bạc25 Huy hiệu đồng1 gold badge23 silver badges25 bronze badges

12

Gần đây đã bị cắn bởi lỗi FP đọc nhiều tài khoản tuyệt vời về cách thức gọn gàng mô hình chức năng phù hợp với JavaScript

Tôi sao chép mã cho tính đầy đủ và đề xuất hai cách điều này có thể được thực hiện về mặt chức năng.

    var carBrands = [];

  var car1 = {name:'ford'};
  var car2 = {name:'lexus'};
  var car3 = {name:'maserati'};
  var car4 = {name:'ford'};
  var car5 = {name:'toyota'};

  carBrands.push(car1);
  carBrands.push(car2);
  carBrands.push(car3);
  carBrands.push(car4);

  // ES6 approach which uses the includes method (Chrome47+, Firefox43+)

  carBrands.includes(car1) // -> true
  carBrands.includes(car5) // -> false

Nếu bạn cần hỗ trợ các trình duyệt cũ hơn sử dụng polyfill, có vẻ như IE9+ và Edge không hỗ trợ nó. Nằm trong phần Polyfill của trang MSDN

Ngoài ra, tôi muốn đề xuất một câu trả lời cập nhật cho CDHowie

// ES2015 syntax
function containsObject(obj, list) {

    return list.some(function(elem) {
      return elem === obj
    })
}

// or ES6+ syntax with cool fat arrows
function containsObject(obj, list) {

    return list.some(elem => elem === obj)
}

Đã trả lời ngày 27 tháng 5 năm 2016 lúc 14:31May 27, 2016 at 14:31

Faktor 10faktor 10Faktor 10

1.7602 huy hiệu vàng21 Huy hiệu bạc29 Huy hiệu đồng2 gold badges21 silver badges29 bronze badges

3

thử mảng.prototype.some ()

Mảng mdn.prototype.some


    function isBiggerThan10(element, index, array) {
      return element > 10;
    }
    [2, 5, 8, 1, 4].some(isBiggerThan10);  // false
    [12, 5, 8, 1, 4].some(isBiggerThan10); // true

Đã trả lời ngày 19 tháng 7 năm 2016 lúc 2:29Jul 19, 2016 at 2:29

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

UtillyouutillyouUtillYou

2312 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges

0

Bạn có thể sử dụng phương pháp grep của JQuery:

$.grep(carBrands, function(obj) { return obj.name == "ford"; });

Nhưng khi bạn chỉ định không có jQuery, bạn chỉ có thể tạo ra một đạo hàm của chức năng. Từ mã nguồn:

function grepArray( elems, callback, inv ) {  
    var ret = [];  

    // Go through the array, only saving the items  
    // that pass the validator function  
    for ( var i = 0, length = elems.length; i < length; i++ ) {  
        if ( !inv !== !callback( elems[ i ], i ) ) {  
            ret.push( elems[ i ] );  
        }  
    }  

    return ret;  
}  

grepArray(carBrands, function(obj) { return obj.name == "ford"; });

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Đã trả lời ngày 3 tháng 1 năm 2011 lúc 18:30Jan 3, 2011 at 18:30

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Stefstefstef

14.1k2 Huy hiệu vàng46 Huy hiệu bạc70 Huy hiệu đồng2 gold badges46 silver badges70 bronze badges

1

Tôi đã sử dụng thư viện JavaScript ____29 để điều chỉnh vấn đề này.

var contains =  carBrands.Contains(car1); //<--- returns bool.
0

Vui lòng tham khảo tài liệu UnderCore.js cho các chức năng nhấn mạnh được sử dụng trong ví dụ trên.

Lưu ý: Đây không phải là một giải pháp JavaScript thuần túy. Chia sẻ cho mục đích giáo dục.

Đã trả lời ngày 11 tháng 3 năm 2013 lúc 7:11Mar 11, 2013 at 7:11

JineshjineshJinesh

2.4572 Huy hiệu vàng21 Huy hiệu bạc22 Huy hiệu đồng2 gold badges21 silver badges22 bronze badges

Bạn chỉ có thể sử dụng toán tử bình đẳng:

function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}
0. Các đối tượng được kiểm tra bằng tham chiếu theo mặc định, vì vậy bạn thậm chí không cần sử dụng toán tử
function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}
1.

Hãy thử điều này, chỉ cần đảm bảo rằng bạn đang sử dụng tham chiếu biến chính xác ở vị trí của

function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}
2:

var contains =  carBrands.Contains(car1); //<--- returns bool.
1

Chỉnh sửa để thêm:

Một phần mở rộng mảng đã được đề cập, vì vậy đây là mã cho nó:

var contains =  carBrands.Contains(car1); //<--- returns bool.
2

Lưu ý rằng tôi đang lưu trữ giá trị độ dài, vì thuộc tính

function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}
3 của mảng thực sự là một người truy cập, chậm hơn một chút so với một biến nội bộ.

Fabiancook

20K16 Huy hiệu vàng66 Huy hiệu bạc112 Huy hiệu đồng16 gold badges66 silver badges112 bronze badges

Đã trả lời ngày 3 tháng 1 năm 2011 lúc 18:28Jan 3, 2011 at 18:28

ZZZZBOVZZZZBOVzzzzBov

171K51 Huy hiệu vàng318 Huy hiệu bạc360 Huy hiệu đồng51 gold badges318 silver badges360 bronze badges

4

Tôi sẽ sử dụng một trình lặp chung của thuộc tính/giá trị trên mảng. Không cần jQuery.

var contains =  carBrands.Contains(car1); //<--- returns bool.
3

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Sampathsris

21K11 Huy hiệu vàng66 Huy hiệu bạc95 Huy hiệu Đồng11 gold badges66 silver badges95 bronze badges

Đã trả lời ngày 28 tháng 2 năm 2015 lúc 5:15Feb 28, 2015 at 5:15

DeiudeiuDeiu

5075 Huy hiệu bạc4 Huy hiệu đồng5 silver badges4 bronze badges

Bạn có thể thử sắp xếp mảng dựa trên một thuộc tính, như vậy:

var contains =  carBrands.Contains(car1); //<--- returns bool.
4

Sau đó bạn có thể sử dụng một thói quen lặp để kiểm tra xem có

var contains =  carBrands.Contains(car1); //<--- returns bool.
5

lớn hơn hoặc nhỏ hơn mục tiêu, v.v., sẽ cho phép bạn đi qua mảng một cách nhanh chóng để tìm thấy đối tượng có tồn tại hay không.

Đã trả lời ngày 3 tháng 1 năm 2011 lúc 18:32Jan 3, 2011 at 18:32

Mạnh mẽRobusto

30,9k8 Huy hiệu vàng55 Huy hiệu bạc76 Huy hiệu đồng8 gold badges55 silver badges76 bronze badges

Chỉnh sửa ngày 18/18/2022

Cách đơn giản nhất bằng cách sử dụng ES6:

var contains =  carBrands.Contains(car1); //<--- returns bool.
6

Sử dụng như vậy:

var contains =  carBrands.Contains(car1); //<--- returns bool.
7

Câu trả lời trước, không sử dụng (vì thứ tự của đạo cụ trong một đối tượng cần phải giống hệt nhau)

var contains =  carBrands.Contains(car1); //<--- returns bool.
8

Đã trả lời ngày 12 tháng 1 lúc 10:17Jan 12 at 10:17

Leon Voglerleon VoglerLeon Vogler

4404 Huy hiệu bạc6 Huy hiệu đồng4 silver badges6 bronze badges

Hãy thử điều này, bạn có thể sử dụng phương thức JavaScript Một số () để tìm hiểu xem mảng JavaScript có chứa một đối tượng không.

var contains =  carBrands.Contains(car1); //<--- returns bool.
9

Đã trả lời ngày 14 tháng 8 lúc 12:06Aug 14 at 12:06

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

1

Tôi biết đây là một bài viết cũ, nhưng tôi muốn cung cấp phiên bản plugin jQuery và mã của tôi.

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
0

usage:

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
1

Đã trả lời ngày 23 tháng 10 năm 2014 lúc 14:06Oct 23, 2014 at 14:06

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Rafael Herscovicirafael HerscoviciRafael Herscovici

16.1K19 Huy hiệu vàng62 Huy hiệu bạc93 Huy hiệu Đồng19 gold badges62 silver badges93 bronze badges

Chức năng này là để kiểm tra một trường duy nhất. Arg 1: Mảng có dữ liệu đã chọn ARG 2: Khóa để kiểm tra Arg 3: Giá trị phải được "xác thực"

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
2

Đã trả lời ngày 25 tháng 2 năm 2016 lúc 8:39Feb 25, 2016 at 8:39

Donny Van Vdonny Van VDonny van V

9211 Huy hiệu vàng10 Huy hiệu bạc20 Huy hiệu đồng1 gold badge10 silver badges20 bronze badges

Bạn có thể sử dụng Array.find ().

Trong trường hợp của bạn sẽ trông như thế này

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
3

Nếu xe không phải là NULL, nó sẽ trả về đối tượng JavaScript có chứa chuỗi 'Ford'

about14sheep

1.4671 Huy hiệu vàng9 Huy hiệu bạc18 Huy hiệu đồng1 gold badge9 silver badges18 bronze badges

Đã trả lời ngày 7 tháng 6 lúc 20:30Jun 7 at 20:30

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Nếu nó có thể sử dụng es6

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
4

Nếu nó đúng thì có sự tương đồng

Đã trả lời ngày 15 tháng 3 lúc 14:18Mar 15 at 14:18

AmiramirAmir

Phù hiệu bằng đồng 3133 bronze badges

Bạn có thể chuyển đổi cả hai đối tượng JSON thành chuỗi và chỉ cần kiểm tra xem JSON lớn hơn có chứa JSON nhỏ hơn không.

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
5

Đã trả lời ngày 25 tháng 3 lúc 3:04Mar 25 at 3:04

Harshita Sethiharshita SethiHarshita Sethi

1.8853 huy hiệu vàng23 Huy hiệu bạc45 Huy hiệu đồng3 gold badges23 silver badges45 bronze badges

Bạn cũng có thể tìm thấy

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}
6

Đã trả lời ngày 27 tháng 9 lúc 12:42Sep 27 at 12:42

Hướng dẫn check same object in array javascript - kiểm tra cùng một đối tượng trong mảng javascript

Làm thế nào để bạn kiểm tra xem một mảng có cùng một đối tượng?

Sử dụng Phương thức bao gồm (): Nếu mảng chứa một đối tượng/phần tử có thể được xác định bằng cách sử dụng phương thức bao gồm (). Phương thức này trả về true nếu mảng chứa đối tượng/phần tử khác trả về sai.: If array contains an object/element can be determined by using includes() method. This method returns true if the array contains the object/element else return false.

Làm thế nào để bạn kiểm tra các bản sao trong mảng các đối tượng trong JS?

Sử dụng phương thức indexof () trong phương thức 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 (). In this method, what we do is that we compare the index of all the items of an array with the index of the first time that number occurs. If they don't match, that implies that the element is a duplicate. All such elements are returned in a separate array using the filter() method.

Làm thế nào để bạn tìm thấy nếu một đối tượng nằm trong một mảng trong JavaScript?

Phương thức isArray () trả về true nếu một đối tượng là một mảng, nếu không thì sai. returns true if an object is an array, otherwise false .

Làm thế nào để bạn so sánh các đối tượng trong mảng?

Để so sánh đúng hai mảng hoặc đối tượng, chúng ta cần kiểm tra:..
Rằng chúng là cùng loại đối tượng (mảng so với đối tượng) ..
Rằng họ có cùng số lượng vật phẩm ..
Rằng mỗi mục bằng với đối tác của nó trong mảng hoặc đối tượng khác.Rằng chúng là cùng loại đối tượng (mảng so với đối tượng so với chuỗi so với số so với chức năng) ..