我需要一种快速的方法来找到另一个阵列。
以下示例描述了我的场景:
我需要找到数组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]
答案 0 :(得分:2)
如果查找数组中没有重复项,则可以Array#findIndex
和Array#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
项中的顺序很重要,请使用find
和JSON.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运算符并比较数组是否包含在其他数组中,因为数组是对象,您无法直接比较它们,因为它们是不同的实例,为了比较它们,您可以尝试使用此技巧将它们转换为串...
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;
答案 3 :(得分:0)
尝试这样的事情
var result = B.filter(function(bArr){ return bArr.length == A.length && bArr.every(function(ele,index){ return ele==A[index]})})