将结果添加到对象

时间:2012-04-24 01:57:47

标签: javascript

我有一个小函数,它将返回的结果添加到对象列表中,但我遇到的问题是,如果存在某些重复,它将不允许它 - 但是在某些方面会发生重复,而其他方面则不会...

我会用例子更好地解释:

var data = {"24":{"16":["172"],"15":["160"]}}

此数据列表转换为:

var data = {"X":{"Y":["id"],"Y":["id"]}};

现在我试图插入这样的新数据:

    for(var key in result){              
      if(result.hasOwnProperty(key)){  
      data[key] = result[key];     
        }
    }

如果考虑网格坐标,在我的对象列表中,Y不能在同一个X中重复,而X根本不能重复。

这是我试图插入的“结果”的示例数据:

{24: {13:[187]}}

因此将var数据转换为:

var data = {"24":{"16":["172"],"15":["160"],"13":["187"]}};

有没有人知道如何为我的循环实施重复检查?

1 个答案:

答案 0 :(得分:1)

// Declare this temporary object we'll use later
var obj = {}

for ( var key in result ){              
    if ( result.hasOwnProperty( key ) ) {
        // If the key already exists
        if ( data[ key ] === result[ key ] ) {

            // Empty the temporary object
            obj = {}
            // Loop through the subkeys
            for ( var subkey in result[ key ] ) {              
                if ( result[ key ].hasOwnProperty( [ subkey ] ) ) {

                    // Fill in the temporary object
                    obj[ subkey ] = result[ key ][ subkey ]
                }
            }

            // Add the new object to the original object
            data[ key ] = obj
        }

        // If the key doesn't exist, do it normally
        else {
            data[ key ] = result[ key ]
        }
    }
}

// Now, to be tedious, let's free up the memory of the temporary object!
obj = null

这样的事情应该有效。如果发生冲突,我会重建内联对象,以便我可以将其添加回所有原始键和新键值。

PS:最后一行只是为了好玩。