搜索2D阵列最干净的方法?

时间:2011-02-06 23:17:14

标签: javascript arrays

我能想到的最简单的方法是for循环:

var arr=[["hey","oh"],["scar","tissue"],["other","side"]];
var query="scar";
for(var z=0;z<arr.length;z++){
   if(arr[z].indexOf(query) !== -1){
      //Found
      break;
   }
}

有没有其他方法可以在2D数组中搜索字符串?

2 个答案:

答案 0 :(得分:11)

var arr = [["hey","oh"],["scar","tissue"],["other","side"]];
var flat = [].concat.apply([], arr);
var col = flat.indexOf(query);
var row = -1;
if (col != -1) // found, now need to extract the row
  while (arr[++row].length <= col) // not this row
    col -= arr[row].length; // so adjust and try again

答案 1 :(得分:2)

你可以这样做:

var arr=[["hey","oh"],["scar","tissue"],["other","side"]];

arr.sort();
arr.join();

按字母顺序排序,

二进制搜索的工作原理是查看数组中的中间值,然后查看搜索到的关键字/数字是否为&gt;或者&lt;该值并因此将数组分成两半,然后再将剩余的一半拆分并继续直到找到搜索到的值;

enter image description here

要实现二进制搜索,请在此处阅读: http://www.timlin.net/csm/cis111/Chapter10.pdf

幻灯片52-56 ...

此方法理论上使您的搜索指数更快。