将Array与多维数组进行比较

时间:2013-09-19 20:12:55

标签: jquery arrays multidimensional-array array-difference

我有2个阵列:

labels = ["water", "sever", "electricity"];
services = [0:[0:"1",1:"sever"], 1:[0:"3",1:"park"], 3:[0:"4",1:"gas"]];

我想检查labelsservices ANY 是否在services中(真或假)。

使用jquery对此进行归档的最佳方法是什么?

编辑1:

是的,我在提问时犯了一个错误,.some是一个JSON对象。

更新

Bregi的第二个解决方案就是我所需要的。 var isInAny = labels.some(function(label) { return services.some(function(s) { return s[1] == label; }); }); 正在实现目标。

{{1}}

3 个答案:

答案 0 :(得分:1)

假设在services

中这些应该是大括号而不是括号
labels.some(function (label) {
    for (var x in services) {
        if (services.hasOwnProperty(x)) {
            return services[x][1] === label;
        }
    }
});

http://jsfiddle.net/WwsLk/

答案 1 :(得分:1)

这在这里经常被回答。你可能想看看^^

但是,给你一个答案:在服务上使用$ .each来生成一个带有字符串的新数组,并将其与标签数组进行比较。

这应该让你知道: Compare two multidimensional arrays in javascript

答案 2 :(得分:1)

使用some Array method(尽管您可能需要为旧版环境填充它):

var isInAny = labels.some(function(label) {
    // since we don't know whether your services object is an actual array
    // (your syntax is invalid) we need to choose iteration/enumeration
    if (typeof services.length == "number") {
        for (var i=0; i<services.length; i++)
            if (services[i][1] == label)
                return true;
    } else {
        for (var p in services)
            if (services[p][1] == label)
                return true;
    }
    return false;
});

如果services确实是一个数组,您也可以使用

var isInAny = labels.some(function(label) {
    return services.some(function(s) {
        return s[1] == label;
    });
});