1

我有这样的 JSON 响应:

 var errorLog = "[[\"comp\",\"Please add company name!\"],
                 [\"zip\",\"Please add zip code!\"],
                  ...

我像这样反序列化:

 var log = jQuery.parseJSON(errorLog);

现在我可以访问这样的元素:

 log[1][1] > "Please add company name"

问题
如果我有第一个值comp,有没有办法通过执行以下操作直接获得第二个值:

 log[comp][1]

无需遍历整个数组。

感谢帮助!

4

4 回答 4

3

不。除非第一个数组的“值”(也许我应该说,第一个维度或第一行),它也是key。也就是说,除非它是这样的:

log = {
    'comp': 'Please add a company name'
                   .
                   .
                   .
}

现在,log['comp']orlog.comp是合法的。

于 2012-06-08T16:46:32.647 回答
1

有两种方法可以做到这一点,但都没有避免循环。第一种是每次访问项目时循环遍历数组:

var val = '';
for (var i = 0; i < errorLog.length; i++) {
    if (errorLog[i][0] === "comp") {
        val = errorLog[i][1];
        break;
    }
}

另一种是将您的数组加工成一个对象并使用对象表示法访问它。

var errors = {};
for (var i = 0; i < errorLog.length; i++) {
    errors[errorLog[i][0]] = errorLog[i][1];
}

然后,您可以使用 访问相关值errors.comp

如果你只看一次,第一个选项可能更好。如果您可能不止一次查看,最好使用第二个系统,因为 (a) 您只需要执行一次循环,这样效率更高,(b) 您不会重复循环代码,(c ) 你想做什么就很明显了。

于 2012-06-08T16:50:07.323 回答
1

无论您要以某种方式循环遍历数组,即使它被 jQuery 之类的工具对您来说有点模糊。

您可以像这样建议的那样从数组创建一个对象:

var objLookup = function(arr, search) {
    var o = {}, i, l, first, second;

    for (i=0, l=arr.length; i<l; i++) {
        first = arr[i][0]; // These variables are for convenience and readability.
        second = arr[i][1]; // The function could be rewritten without them.

        o[first] = second;
    }

    return o[search];
}

但更快的解决方案是遍历数组并在找到值后立即返回:

var indexLookup = function(arr, search){
   var index = -1, i, l;

    for (i = 0, l = arr.length; i<l; i++) {
        if (arr[i][0] === search) return arr[i][1];
    }

    return undefined;
}

然后,您可以在代码中像这样使用这些函数,这样您就不必在所有代码的中间进行循环:

var log = [
    ["comp","Please add company name!"],
    ["zip","Please add zip code!"]
];

objLookup(log, "zip"); // Please add zip code!
indexLookup(log, "comp"); // Please add company name!

这是一个jsfiddle,显示了这些在使用中。

于 2012-06-08T17:20:22.430 回答
0

你看过 jQuery 的grepinArray方法吗?

看到这个讨论

是否有任何 jquery 功能可以以与 DOM 类似的方式查询多维数组?

于 2012-06-08T16:48:28.187 回答