如何检查多维数组中是否存在数组键?

时间:2014-08-12 19:01:54

标签: javascript

我有一个这样的数组:

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是否包含第二个数组?另一个问题是在压缩期间不应该考虑值顺序

2 个答案:

答案 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;
            }
        }
    }
}

演示:http://jsfiddle.net/Guffa/oa11qc4r/1/

答案 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);