[英]How to check if an array contains another array?
我需要二維數組,所以我制作了嵌套數組,因為 JavaScript 不允許它們。
他們看起來像這樣:
var myArray = [
[1, 0],
[1, 1],
[1, 3],
[2, 4]
]
如何檢查此數組是否包含 vanilla JS 中的特定元素(即這些[0,1]
數組之一)?
這是我嘗試過的,但沒有成功(一切都返回false
) (編輯:我在代碼段中包含了答案) :
var myArray = [ [1, 0], [1, 1], [1, 3], [2, 4] ] var itemTrue = [2, 4]; var itemFalse = [4, 4]; function contains(a, obj) { var i = a.length; while (i--) { if (a[i] === obj) { return true; } } return false; } // EDIT : first answer's solution function isArrayInArray(x, check) { for (var i = 0, len = x.length; i < len; i++) { if (x[i][0] === check[0] && x[i][1] === check[1]) { return true; } } return false; } // EDIT : accepted answer's solution function isArrayInArray2(x, check) { var result = x.find(function(ele) { return (JSON.stringify(ele) === JSON.stringify(check)); }) return result !=null } console.log("true :" + myArray.includes(itemTrue)); console.log("false :" + myArray.includes(itemFalse)); console.log("true :" + (myArray.indexOf(itemTrue) != -1)); console.log("false :" + (myArray.indexOf(itemFalse) != -1)); console.log("true :" + contains(myArray, itemTrue)); console.log("false :" + contains(myArray, itemFalse)); // EDIT : first answer's solution console.log("true :" + isArrayInArray(myArray, itemTrue)); console.log("false :" + isArrayInArray(myArray, itemFalse)); // EDIT : accepted answer's solution console.log("true :" + isArrayInArray2(myArray, itemTrue)); console.log("false :" + isArrayInArray2(myArray, itemFalse));
它可能看起來像重復,但我找不到類似的問題。 如果是,請隨意標記它。
簡短易行,將數組字符串化並作為字符串進行比較
function isArrayInArray(arr, item){
var item_as_string = JSON.stringify(item);
var contains = arr.some(function(ele){
return JSON.stringify(ele) === item_as_string;
});
return contains;
}
var myArray = [
[1, 0],
[1, 1],
[1, 3],
[2, 4]
]
var item = [1, 0]
console.log(isArrayInArray(myArray, item)); // Print true if found
在這里查看一些文檔
嵌套數組本質上是一個二維數組, var x = [[1,2],[3,4]]
將是一個二維數組,因為我用 2 個索引引用它,例如x[0][1]
將是2
。
關於您的問題,您可以使用普通循環來判斷它們是否包含在內,因為復雜數組不支持它:
var x = [[1,2],[3,4]];
var check = [1,2];
function isArrayInArray(source, search) {
for (var i = 0, len = source.length; i < len; i++) {
if (source[i][0] === search[0] && source[i][1] === search[1]) {
return true;
}
}
return false;
}
console.log(isArrayInArray(x, check)); // prints true
function isArrayInArray(source, search) {
var searchLen = search.length;
for (var i = 0, len = source.length; i < len; i++) {
// skip not same length
if (source[i].length != searchLen) continue;
// compare each element
for (var j = 0; j < searchLen; j++) {
// if a pair doesn't match skip forwards
if (source[i][j] !== search[j]) {
break;
}
return true;
}
}
return false;
}
console.log(isArrayInArray([[1,2,3],[3,4,5]], [1,2,3])); // true
你不能那樣做 .instance 你必須自己做一些事情..首先你必須從你想要搜索的數組中做一個 foreach 並為你的數組的每個項目運行'compareArray'函數。
function compareArray( arrA, arrB ){
//check if lengths are different
if(arrA.length !== arrB.length) return false;
for(var i=0;i<arrA.length;i++){
if(arrA[i]!==arrB[i]) return false;
}
return true;
}
D. Young 的注釋提供的用於檢查任何長度數組的代碼是錯誤的。 它只檢查第一個元素是否相同。
D. Young 評論的更正版本:
function isArrayInArray(source, search) {
var searchLen = search.length;
for (var i = 0, len = source.length; i < len; i++) {
// skip not same length
if (source[i].length != searchLen) continue;
// compare each element
for (var j = 0; j < searchLen; j++) {
// if a pair doesn't match skip forwards
if (source[i][j] !== search[j]) {
break;
} else if (j == searchLen - 1) {return true}
}
}
return false;
}
對於那些有興趣在另一個數組中查找數組並取回索引號的人,這里是mohamed-ibrahim 答案的修改版本:
function findArrayInArray(innerArray, outerArray) {
const innerArrayString = JSON.stringify(innerArray);
let index = 0;
const inArray = outerArray.some(function (element) {
index ++;
return JSON.stringify(element) === innerArrayString;
});
if (inArray) {
return index - 1;
} else {
return -1;
}
}
findArrayInArray([1, 2, 3], [[3, .3], [1, 2, 3], [2]]); // 1
findArrayInArray([1, 2, 3], [[[1], 2, 3], [2]]) // -1
此函數返回您在外部數組中搜索的數組的索引,如果未找到,則返回 -1。
簽出這個CodePen 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.