Javascript:检查元素是否在二维数组中的快速方法?

时间:2014-12-27 14:56:51

标签: javascript arrays

我有一个nodes_object数组,它具有以下类型的结构:

  nodes_object = {
             1: {
                 source: '001',
                 name: 'A',
                 target: '004',
                 name: 'B'
                },
             2: {
                 source: '003',
                 name: 'C',
                 target: '001',
                 name: 'A'
                },
             }

然后我还有一个数组sorted,其结构如下:

     sorted = { 
             1: {
                val: '001',
                count: '100'
                },
             2: {
                val: '003',
                count: '80'
             }

我需要创建一个函数,该函数将通过nodes_object重复,检查sourcetarget是否包含在sorted {{ 1}}参数,如果是,则继续进行。

到目前为止,我想出了下面的函数,它首先通过val重复,然后通过nodes_object重申,看看其中是否存在任何元素,但我想知道如果有更快,更有效的方法吗?

谢谢!

sorted

1 个答案:

答案 0 :(得分:3)

首先,要创建数组,请使用[],而不是{}。所以它应该是:

nodes_object = [
    {
     source: '001',
     name: 'A',
     target: '004',
     name: 'B'
    },
    {
     source: '003',
     name: 'C',
     target: '001',
     name: 'A'
    },
];

,同样适用于sorted

创建一个对象,其对象是您要测试的val个对象。

hash = {};
for (var k = 0; k < sorted.length; k++) {
    hash[sorted[k]] = true;
}

然后,您可以使用in hash来测试sorted中是否找到了某些内容:

var sourcein, targetin;
for (var i = 0; i < nodes_object.length; i++) {
    sourcein = nodes_object[i].source in hash;
    targetin = nodes_object[i].target in hash;
    if (sourcein && targetin) {
        ...
    }
}