【问题标题】:Associative arrays in javascript to JSONjavascript中的关联数组到JSON
【发布时间】:2010-07-13 08:09:54
【问题描述】:

我使用数组作为对象的关联数组,其中键是数据库中对象的 ID 号。安静自然 - ID 是大数字 - 这意味着通常有长度为 10^4 的数组,只有 20 个元素作为有效的真实对象。

我想将此数据发送回服务器,但是无论我必须将 js 对象转换为 JSON 的任何插件 - 我都尝试了它们并且它们都生成了长度为 10^4 的 JSON 字符串。这么多数据发不回来了。

我需要一种将关联数组转换为 JSON 以丢弃未定义条目的方法。
有什么建议吗?

编辑: 我的数组的示例: var myAssociativeArray = [undefined, undefined,undefined...., someobject, some other object ...,undefined, ... 还有一个....]

【问题讨论】:

  • ....您是否使用Array 作为关联数组?
  • 添加前缀怎么样:var myAssociativeArray = { a123812039 : "Something", a123656456 : "something else" }

标签: javascript associative-array json


【解决方案1】:

听起来您有一个常规数组,但您使用它时就好像它是稀疏的(它可能在内部也可能不在内部)。以下是如何使用将转换为对象的替换函数:

JSON.stringify(root, function(k,v) 
{ 
  if(v instanceof Array) 
  { 
    var o = {}; 
    for(var ind in v) 
    { 
      if(v.hasOwnProperty(ind)) 
      { 
        o[ind] = v[ind]; 
      }
    } 
    return o; 
  } 
  return v; 
}); 

【讨论】:

    【解决方案2】:

    阅读您的问题,它看起来正在使用数组。这是仅获取数组的已定义条目的一种解决方案(不保证顺序)。

    请注意,由于它是一个稀疏数组,例如可以达到 10000,因此最好只枚举属性而不是实际从 0 循环到 9999,因为它们中的大多数无论如何都是未定义的。所以这对性能更好。

    var definedEntries = {};
    
    for(var prop in dataObject) {
        if(dataObject.hasOwnProperty(prop)) {
            definedEntries[prop] = dataObject[prop];
        }
    }
    

    然后发送definedEntries到服务器。

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 2021-03-24
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多