我有一个这样的数组:
var winArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[1, 5, 9],
[7, 5, 3]
];
另一个像这样的数组:
var Xarray = [1,2,3]
如何检查第一个数组的索引0是否包含第二个数组?另一个问题是在压缩期间不应该考虑值顺序
答案 0 :(得分:1)
将数组复制到新数组,以便您可以对它们进行排序,然后比较数组中的每个项目:
var a1 = winArray[0].slice(0);
var a2 = Xarray.slice(0);
var equal = a1.length == a2.length;
if (equal) {
a1.sort();
a2.sort();
for (var i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
equal = false;
break;
}
}
}
演示:http://jsfiddle.net/Guffa/oa11qc4r/
如果您想要搜索数组中的匹配项,而不仅仅是比较索引0处的数组,那么您将遍历数组并比较每个数组:
var a1 = Xarray.slice(0);
a1.sort();
var equal = false;
for (var j = 0; !equal && j < winArray.length; j++) {
var a2 = winArray[j].slice(0);
equal = a1.length == a2.length;
var index = j;
if (equal) {
a2.sort();
for (var i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
equal = false;
break;
}
}
}
}
答案 1 :(得分:0)
可能会试一试。如果在主数据数组中找到'子数组',该函数将返回该子数组的索引。如果未找到-1将返回。
var winArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 4, 7],
[2, 5, 8],
[3, 6, 9],
[1, 5, 9],
[7, 5, 3]
];
var Xarray = [1,2,3];
function indexOfPredicate(data, value, predicate) {
if (typeof(predicate) !== 'function') {
throw "Predicate must be a function"
}
for(var x = 0; x < data.length; x++) {
if (predicate(data[x], value)) {
return x
}
}
return -1;
}
function indexOfMulti(data, value) {
return indexOfPredicate(data, value, function(a, b) {
if (a.length !== b.length) {
return false;
}
for(var i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
})
}
var index = indexOfMulti(winArray, Xarray);
var contains = index > -1;
console.log(index);
console.log(contains);