我有一个2d数组(3 * 3)和一个1d(3)数组。现在我想在列和行中找到2d数组中的1d数组,顺序并不重要。即
A=[
[0,1,2],
[3,4,5],
[6,7,8]
];
我的1d数组就像:
t=[7,4,1];
我想在2d数组中搜索第二个数组(1d)时返回true,现在我不知道这是怎么回事?
答案 0 :(得分:0)
为每行2d数组创建一个新的1d哈希数组。然后哈希源1d数组并在1d数组中搜索哈希而不是2d。
var is_in_there = array_of_hashes.indexOf("source_hash");
答案 1 :(得分:0)
我的解决方案非常天真,写起来很无聊。
它包含3个嵌套循环,并将矩阵每行(首先)中的每个元素与数组中的元素进行比较,如果找到所有元素,则返回成功,然后再将3个嵌套循环与每个列进行比较矢量。
答案 2 :(得分:0)
嗨,这是我的解决方案。
如果您想尝试,可以查看小提琴:https://jsfiddle.net/arnaudbertrand/skgo9yay/
var d2 = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
];
var b = [7, 4, 1];
function inArrayWithoutOrder(d2, d1) {
var match = false;
d2.forEach(function (arr) {
var temp = d1.slice(0);
arr.forEach(function (e) {
var i = temp.indexOf(e);
if (i != -1) {
temp.splice(i, 1);
} else {
return false;
}
});
if (temp.length == 0) {
match = true;
}
});
return match;
}
function invertRowColumn(d2) {
var newArray = [];
d2.forEach(function (d1, i) {
d1.forEach(function (e, j) {
if (i == 0) {
newArray[j] = [];
}
newArray[j].push(e);
});
});
return newArray;
}
function inArrayColumnRowWithoutOrder(d2, b){
return inArrayWithoutOrder(d2, b) || inArrayWithoutOrder(invertRowColumn(d2),b);
}
然后你可以使用:inArrayColumnRowWithoutOrder(d2,b)
你可能会让它看起来更好但至少它似乎做你想要的