如何在二维数组中查找字符串?

3
我有一个看起来像这样的数组。
var array[["a","b"],["c","d"],["e","f"]];         

我希望能够搜索数组中的字符串 "d" 并返回相应的值 "c"

[["a","b"],["c","d"],["e","f"]].filter(function(a){return a[1]==this}, "d")[0][0] - dandavis
不,我想要灵活地搜索第一个或第二个元素。 - Goeff
为什么不尝试将其解析为JSON对象,然后直接从中获取值呢? - Carlos2W
@Carlos2W 没有所谓的 JSON 对象。JSON 是一个“字符串”。 - Ram
那样做有什么意义呢?你的建议实际上毫无意义。 - Ram
显示剩余6条评论
2个回答

3

尝试:

function find_str(array){
  for(var i in array){
    if(array[i][1] == 'd'){
      return array[i][0];
    }
  }
}

编辑:

function find_str(array){
  for(var i=0;i<array.length;i++){
    if(array[i][1] == 'd'){
      return array[i][0];
    }
  }
}

我尝试了这种方法,但它返回了"c,d",我希望它只返回"c"。 - Goeff
谢谢 - 我刚刚发现了我的代码中的一个错误,修复了它并且它可以工作了。非常感谢 - 问题解决了! - Goeff

2
一个通用的函数,用于获取包含指定值的所有数组元素。以下函数使用了Array.prototype的几种方法:filterindexOfmapslicespliceconcat,以便展开数组。
var array = [["a","b"],["c","d"],["c","e","f"]];   

function findBy(arr, val) {
    var ret = arr.filter(function(el) {
        return el.indexOf(val) > -1;
    }).map(function(el) {
       var res = el.slice();
       res.splice(el.indexOf(val), 1);
       return res;
    });
    return Array.prototype.concat.apply([], ret);
}

findBy(array, 'c');
// -> ["d", "e", "f"]
findBy(array, 'b');
// -> ["a"]
findBy(array, 'g');
// -> []

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接