使用JavaScript

时间:2018-01-08 12:22:22

标签: javascript arrays search multidimensional-array

我需要一种快速的方法来找到另一个阵列。

以下示例描述了我的场景:

我需要找到数组A:

var A = ["A0", "B0", "C0", "D2", "E2", "F0", "G2"];

在数组B中(请注意,我的B数组可能包含数百万个结果):

B[
["X0", "O0", "I0", "Z2", "T2", "L0", "V2"],
["I0", "V2", "O0", "T0", "L4", "X0", "Z3"],
["A0", "B0", "C0", "D2", "E2", "F0", "G2"],
["Z2", "L7", "T0", "I1", "V3", "X0", "O0"],
["Z3", "I1", "O0", "T3", "X0", "L2", "V2"],
["O0", "X0", "I1", "T2", "V0", "Z3", "L2"],
["I0", "Z0", "L7", "X0", "V3", "O0", "T3"],
["L3", "X0", "I1", "O0", "V0", "Z1", "T1"]
];

是否有一个函数可以向我提供真或假的陈述,或者在上述情况下为实际结果: B [2]

4 个答案:

答案 0 :(得分:2)

如果查找数组中没有重复项,则可以Array#findIndexArray#every使用Array#includes

function getIndex(needle, haystack) {
    return haystack.findIndex(h => needle.every(n => h.includes(n)));
}

var a = ["A0", "B0", "C0", "D2", "E2", "F0", "G2"],
    b = [["X0", "O0", "I0", "Z2", "T2", "L0", "V2"], ["I0", "V2", "O0", "T0", "L4", "X0", "Z3"], ["A0", "B0", "C0", "D2", "E2", "F0", "G2"], ["Z2", "L7", "T0", "I1", "V3", "X0", "O0"], ["Z3", "I1", "O0", "T3", "X0", "L2", "V2"], ["O0", "X0", "I1", "T2", "V0", "Z3", "L2"], ["I0", "Z0", "L7", "X0", "V3", "O0", "T3"], ["L3", "X0", "I1", "O0", "V0", "Z1", "T1"]];
    
console.log(getIndex(a, b));

答案 1 :(得分:1)

如果A项中的顺序很重要,请使用findJSON.stringify

var aStr = JSON.stringify( A );
var doesExists = !!B.find( s => JSON.stringify( s ) == aStr );

<强>演示

var B = [
["X0", "O0", "I0", "Z2", "T2", "L0", "V2"],
["I0", "V2", "O0", "T0", "L4", "X0", "Z3"],
["A0", "B0", "C0", "D2", "E2", "F0", "G2"],
["Z2", "L7", "T0", "I1", "V3", "X0", "O0"],
["Z3", "I1", "O0", "T3", "X0", "L2", "V2"],
["O0", "X0", "I1", "T2", "V0", "Z3", "L2"],
["I0", "Z0", "L7", "X0", "V3", "O0", "T3"],
["L3", "X0", "I1", "O0", "V0", "Z1", "T1"]
];
var A = ["A0", "B0", "C0", "D2", "E2", "F0", "G2"];

var aStr = JSON.stringify( A );
var doesExists = !!B.find( s => JSON.stringify( s ) == aStr );

console.log( doesExists );

如果订单无关紧要,请在比较之前先使用sort

var fnSort = (a,b) => a.localeCompare( b );
var aStr = JSON.stringify( A.sort( fnSort ) );
var doesExists = !!B.find( s => JSON.stringify( s.sort( fnSort ) ) == aStr );

<强>演示

var B = [
["X0", "O0", "I0", "Z2", "T2", "L0", "V2"],
["I0", "V2", "O0", "T0", "L4", "X0", "Z3"],
["A0", "B0", "C0", "D2", "E2", "F0", "G2"],
["Z2", "L7", "T0", "I1", "V3", "X0", "O0"],
["Z3", "I1", "O0", "T3", "X0", "L2", "V2"],
["O0", "X0", "I1", "T2", "V0", "Z3", "L2"],
["I0", "Z0", "L7", "X0", "V3", "O0", "T3"],
["L3", "X0", "I1", "O0", "V0", "Z1", "T1"]
];
var A = ["A0", "B0", "C0", "D2", "E2", "F0", "G2"];

var fnSort = (a,b) => a.localeCompare( b );
var aStr = JSON.stringify( A.sort( fnSort ) );
var doesExists = !!B.find( s => JSON.stringify( s.sort( fnSort ) ) == aStr );

console.log( doesExists );

答案 2 :(得分:0)

您可以使用find运算符并比较数组是否包含在其他数组中,因为数组是对象,您无法直接比较它们,因为它们是不同的实例,为了比较它们,您可以尝试使用此技巧将它们转换为串...

&#13;
&#13;
var A = ["A0", "B0", "C0", "D2", "E2", "F0", "G2"];

var B = [
["X0", "O0", "I0", "Z2", "T2", "L0", "V2"],
["I0", "V2", "O0", "T0", "L4", "X0", "Z3"],
["A0", "B0", "C0", "D2", "E2", "F0", "G2"],
["Z2", "L7", "T0", "I1", "V3", "X0", "O0"],
["Z3", "I1", "O0", "T3", "X0", "L2", "V2"],
["O0", "X0", "I1", "T2", "V0", "Z3", "L2"],
["I0", "Z0", "L7", "X0", "V3", "O0", "T3"],
["L3", "X0", "I1", "O0", "V0", "Z1", "T1"],
["A0", "B0", "C0", "D2", "E2", "F0", "G2"]
];

function isIncluded(element) {
  return element.toString() == A.toString();
}

console.log(B.find(isIncluded)); // 130
&#13;
&#13;
&#13;

答案 3 :(得分:0)

尝试这样的事情

var result = B.filter(function(bArr){ return bArr.length == A.length && bArr.every(function(ele,index){ return ele==A[index]})})