39
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang sử dụng JavaScript và muốn kiểm tra xem một mảng có tồn tại trong một mảng mảng hay không.
Đây là mã của tôi, cùng với các giá trị trả về:
var myArr = [1,3];
var prizes = [[1,3],[1,4]];
prizes.indexOf[myArr];
-1
Tại sao?
Nó giống nhau trong jQuery:
$.inArray[myArr, prizes];
-1
Tại sao lại trở lại -1 khi phần tử có mặt trong mảng?
Đã hỏi ngày 23 tháng 10 năm 2013 lúc 13:48Oct 23, 2013 at 13:48
2
Bạn có thể sử dụng cái này
var a = [ [1,2] , [3,4] ];
var b = [1,2];
a = JSON.stringify[a];
b = JSON.stringify[b];
sau đó bạn có thể chỉ làm một chỉ mục [] để kiểm tra xem nó có mặt không
var c = a.indexOf[b];
if[c != -1]{
console.log['element present'];
}
Đã trả lời ngày 19 tháng 10 năm 2015 lúc 9:24Oct 19, 2015 at 9:24
ajack13ajack13ajack13
6171 Huy hiệu vàng7 Huy hiệu bạc1 gold badge7 silver badges10 bronze badges
3
Bởi vì
$.inArray[myArr, prizes];
-1
4, vì các đối tượng sẽ chỉ bằng nếu chúng tham chiếu cùng một đối tượng. Bạn cần viết thói quen tìm kiếm của riêng bạn:function searchForArray[haystack, needle]{
var i, j, current;
for[i = 0; i < haystack.length; ++i]{
if[needle.length === haystack[i].length]{
current = haystack[i];
for[j = 0; j < needle.length && needle[j] === current[j]; ++j];
if[j === needle.length]
return i;
}
}
return -1;
}
var arr = [[1,3],[1,2]];
var n = [1,3];
console.log[searchForArray[arr,n]]; // 0
Người giới thiệu
- Sử dụng các toán tử bình đẳng:
Nếu cả hai toán hạng là đối tượng, chúng được so sánh dưới dạng đối tượng và kiểm tra bình đẳng chỉ đúng nếu cả hai đề cập đến cùng một đối tượng.
Đã trả lời ngày 23 tháng 10 năm 2013 lúc 13:50Oct 23, 2013 at 13:50
ZetazetaZeta
101K13 Huy hiệu vàng191 Huy hiệu bạc231 Huy hiệu Đồng13 gold badges191 silver badges231 bronze badges
4
Bạn có thể lặp lại mảng mảng với
$.inArray[myArr, prizes];
-1
5 và sau đó kiểm tra mọi mục của mảng bên trong với mảng duy nhất với $.inArray[myArr, prizes];
-1
6.var array = [1, 3],
prizes = [[1, 3], [1, 4]],
includes = prizes.some[a => array.every[[v, i] => v === a[i]]];
console.log[includes];
Đã trả lời ngày 27 tháng 2 năm 2019 lúc 9:06Feb 27, 2019 at 9:06
Nina Scholznina ScholzNina Scholz
361K24 Huy hiệu vàng323 Huy hiệu bạc365 Huy hiệu Đồng24 gold badges323 silver badges365 bronze badges
1
Bởi vì cả hai phương pháp này đều sử dụng bình đẳng tham chiếu khi hoạt động trên các đối tượng. Mảng tồn tại và cái bạn đang tìm kiếm có thể giống hệt nhau về mặt cấu trúc, nhưng chúng là các đối tượng duy nhất để chúng không so sánh như nhau.
Điều này sẽ cho kết quả dự kiến, ngay cả khi nó không hữu ích trong thực tế:
var myArr = [1,3];
var prizes = [myArr,[1,4]];
prizes.indexOf[myArr];
Để làm những gì bạn muốn, bạn sẽ cần phải viết mã so sánh rõ ràng nội dung của các mảng một cách đệ quy.
Đã trả lời ngày 23 tháng 10 năm 2013 lúc 13:50Oct 23, 2013 at 13:50
ZetazetaJon
101K13 Huy hiệu vàng191 Huy hiệu bạc231 Huy hiệu Đồng78 gold badges723 silver badges793 bronze badges
Bạn có thể lặp lại mảng mảng với
$.inArray[myArr, prizes];
-1
5 và sau đó kiểm tra mọi mục của mảng bên trong với mảng duy nhất với $.inArray[myArr, prizes];
-1
6.Đã trả lời ngày 27 tháng 2 năm 2019 lúc 9:06
Đã trả lời ngày 23 tháng 10 năm 2013 lúc 13:50Oct 23, 2013 at 13:50
ZetazetaWolph
101K13 Huy hiệu vàng191 Huy hiệu bạc231 Huy hiệu Đồng10 gold badges132 silver badges147 bronze badges
Bạn có thể lặp lại mảng mảng với
$.inArray[myArr, prizes];
-1
5 và sau đó kiểm tra mọi mục của mảng bên trong với mảng duy nhất với $.inArray[myArr, prizes];
-1
6.// attach the .compare method to Array's prototype to call it on any array
Array.prototype.compare = function [array] {
// if the other array is a falsy value, return
if [!array]
return false;
// compare lengths - can save a lot of time
if [this.length != array.length]
return false;
for [var i = 0; i < this.length; i++] {
// Check if we have nested arrays
if [this[i] instanceof Array && array[i] instanceof Array] {
// recurse into the nested arrays
if [!this[i].compare[array[i]]]
return false;
}
else if [this[i] != array[i]] {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
Đã trả lời ngày 27 tháng 2 năm 2019 lúc 9:06
prizes.filter[function[a]{ return a.compare[myArr]}]
Nina Scholznina Scholz
361K24 Huy hiệu vàng323 Huy hiệu bạc365 Huy hiệu ĐồngOct 23, 2013 at 13:57
Bởi vì cả hai phương pháp này đều sử dụng bình đẳng tham chiếu khi hoạt động trên các đối tượng. Mảng tồn tại và cái bạn đang tìm kiếm có thể giống hệt nhau về mặt cấu trúc, nhưng chúng là các đối tượng duy nhất để chúng không so sánh như nhau.Hilmi
Điều này sẽ cho kết quả dự kiến, ngay cả khi nó không hữu ích trong thực tế:6 gold badges25 silver badges54 bronze badges
Để làm những gì bạn muốn, bạn sẽ cần phải viết mã so sánh rõ ràng nội dung của các mảng một cách đệ quy.
Jonjon
let anarr = ['a',1, 2]
let arrofarrs = [['a',1, 2], [2,3,4]]
arrofarrs.map[
subarr => subarr.every[
[arr_elem, ind] => arr_elem == anarr[ind]
]
]
// output
// Array [ true, false ]
419K78 Huy hiệu vàng723 Huy hiệu bạc793 Huy hiệu Đồng
$.inArray[myArr, prizes];
-1
0Bởi vì các đối tượng JavaScript được so sánh bằng danh tính, không phải giá trị. Vì vậy, nếu họ không tham khảo cùng một đối tượng, họ sẽ trả về sai.
Bạn cần so sánh đệ quy để điều này hoạt động đúng.Apr 26, 2021 at 21:34
Wolphwolph
$.inArray[myArr, prizes];
-1
175,8K10 Huy hiệu vàng132 Huy hiệu bạc147 Huy hiệu đồng
Đầu tiên xác định chức năng so sánh cho các mảngOct 23, 2013 at 14:18
thứ hai chỉ cần tìm mảng vớiguypursey
Lưu ý: Kiểm tra khả năng tương thích của trình duyệt cho mảng.Filter3 gold badges22 silver badges40 bronze badges
$.inArray[myArr, prizes];
-1
2Đã trả lời ngày 23 tháng 10 năm 2013 lúc 13:57
Hilmihilmi
-
3.3616 Huy hiệu vàng25 Huy hiệu bạc54 Huy hiệu đồng
Không phải là chuyên gia của JS, mà chỉ tìm ra cách làm điều này với
7 và$.inArray[myArr, prizes]; -1
8$.inArray[myArr, prizes]; -1
Để tìm các chỉ số của các trận đấu:
Và để kiểm tra ________ 19/________ 20 Nếu mảng có chứa Subarray chỉ cần thay đổi
var a = [ [1,2] , [3,4] ];
var b = [1,2];
a = JSON.stringify[a];
b = JSON.stringify[b];
1 thành var a = [ [1,2] , [3,4] ];
var b = [1,2];
a = JSON.stringify[a];
b = JSON.stringify[b];
2OFC chỉ hoạt động cho một lớp làm tổ, nhưng có thể được làm lại;]Jun 25, 2016 at 19:42
Đã trả lời ngày 26 tháng 4 năm 2021 lúc 21:34Cumulo Nimbus
Giả sử bạn chỉ xử lý một mảng hai chiều [bạn đề cập đến một "mảng mảng" nhưng không có gì sâu sắc hơn thế], mã không nhận được này nên làm những gì bạn cần.9 gold badges47 silver badges65 bronze badges
$.inArray[myArr, prizes];
-1
3JSfiddle: //jsfiddle.net/guypursey/v7xpe/. [Xem bảng điều khiển để xem kết quả.]Jan 26, 2021 at 21:57
Đã trả lời ngày 23 tháng 10 năm 2013 lúc 14:18
GUYPURSYGUPURSEY
3.0443 Huy hiệu vàng22 Huy hiệu bạc40 Huy hiệu đồngJun 28, 2021 at 7:39