我在JavaScript中有一个二维数组。如何在二维数组中搜索一维数组?
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']];
我要搜索的1-d阵列['a', 'b']
或ARR 1-d阵列['b', 'a']
。什么将是最有效的方法? 将使用任何其他数据结构使其更高效。我添加,遍历arr和搜索一维数组的方法。
我在JavaScript中有一个二维数组。如何在二维数组中搜索一维数组?
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']];
我要搜索的1-d阵列['a', 'b']
或ARR 1-d阵列['b', 'a']
。什么将是最有效的方法? 将使用任何其他数据结构使其更高效。我添加,遍历arr和搜索一维数组的方法。
首先,您需要定义两个数组的“平等”意味着什么。由于somearray == otherarray
是唯一真正的,如果两个变量引用数组对象完全相同的情况下
(即a = [1,2]; b = [1,2]; c = a;
允许a == c
但a != b
)
这是最好的一个函数来完成。例如,areArraysEqual(a,b)
。在你的情况下,如果数组包含相同的元素,但不一定按相同的顺序,此函数将需要返回true
。就个人而言,我会建议每个阵列.sort()
,然后逐个比较元素 - 排序后,a[0]
应该等于b[0]
,a[1]
等于b[1]
,依此类推。
既然你有你的数组比较函数,那么迭代你的大数组是很简单的事情,并且每个数组都检查它是否等于你的单个数组。如果是,请退回您所在的位置并停止。
现在去写一些代码,并与一个特定的问题回来,如果您有任何:对
我不确定我是否理解,但您可以用shift()获取第一个“元素”,然后您可以进一步操作它。
var arr = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['i', 'k']].shift();
arr; // arr is now ['a', 'b']
for(var i=0; i<arr.length;i++){
if(arr[i] == "b"){
//matched 'b'
}
}
从那里你可以使用for循环搜索它。我希望我能正确理解你。
我与@Niet黑暗ABSOL 同意,我认为不是坏主意通过比较一个元素之前一个用来比较长度,并且只用相同长度的数组对数组进行排序,而您发现它比排序所有一维数组更有效率。
function find(arr1d, arr2d) {
var result = [];
for (var i = 0; i < arr2d.length; ++i){
if (arr2d[i].length == arr1d.length){
var equal = true;
for (var j = 0; j < arr1d.length; ++j){
if (arr2d[i].indexOf(arr1d[j]) == -1){
equal = false;
break;
}
}
if (equal)
result.append(arr2d[i]);
}
}
return result;
}
这个解决方案没有如此高效喜欢与排序,但如果你将整理和你不想改变你2-d数组你应该复制的数据,这是非常耗时,在这种情况下我的解决方案,我认为比分类更有效率。
应该对我的回答发表评论:p –
我已经添加了代码:p –
在此实例中创建哈希而不是嵌套循环更有效吗? – BenM