Javascript对象到数组

问题描述:

我在转换某些JSON时遇到了一些问题,并且我得到了一些帮助。这是我的问题,我已经JSON返回以下内容:JSON的收到(从CSV文件)Javascript对象到数组

例子:

[ 
    { 
     "rating": "0", 
     "title": "The Killing Kind", 
     "author": "John Connolly", 
     "type": "Book", 
     "asin": "0340771224", 
     "tags": "", 
     "review": "i still haven't had time to read this one..." 
    }, 
    { 
     "rating": "0", 
     "title": "The Third Secret", 
     "author": "Steve Berry", 
     "type": "Book", 
     "asin": "0340899263", 
     "tags": "", 
     "review": "need to find time to read this book" 
    }, 

    cut for brevity 

] 

现在,这是对象的一个​​一个维数组,但我有一个函数,我需要通过这个将只需要一个多维数组。我无法改变这一点。我一直在网上寻找周围的转换和整个这个代码就来了:

if (! obj.length) { return [];} // length must be set on the object, or it is not iterable 
    var a = []; 

    try { 
     a = Array.prototype.slice.call(obj, n); 
    } 
    // IE 6 and posssibly other browsers will throw an exception, so catch it and use brute force 
    catch(e) { 
     Core.batch(obj, function(o, i) { 
      if (n <= i) { 
       a[i - n] = o; 
      } 
     }); 
    } 

    return a; 

但我的代码一直陷在“无对象长度”的一部分。当我遍历每个对象时,我逐字逐句逐字。不幸的是,这些字段名称(评级,标题,作者)等没有设置,我无法使用obj.Field标记访问任何内容。

我被困在这个;有没有办法将这些对象转换为数组,还是我必须返回到开头并转储JSON?

+1

到底你想如何“转换”对象?换句话说,结果数组需要看起来像什么?对此没有单一的答案。它可能是很多不同的东西,但是你需要调用的这个函数需要特别的东西。 – Pointy 2011-06-02 13:38:06

有一个很好的JavaScript库称为Undersore.js其完成所有类型的对象/数组操作。

使用它,因为这

_(json).each(function(elem, key){ 
    json[key] = _(elem).values(); 
}); 
+0

这解决了我的问题,非常感谢! – Speedy 2011-06-02 14:17:32

如果我理解正确,您需要知道两件事才能实现此目标。

其中一个事实是object.member也可以写成object["member"]。这意味着您不必将您的属性名称硬编码到阵列转换器的对象中,但可以将它们视为字符串。

第二个是for-in声明(请参阅section 12.6.4)。对于一个对象,这遍历所有的成员。

下面将导致innerArray是包含所有对象

var innerArray = []; 
for (property in object) { 
    innerArray.push(object[property]); 
} 

的所有成员利用这些知识的值的数组,你可以定制阵列包含它的任何信息,你需要从json对象中提取。

这将输出:

var newJSON = []; 

for (var i = 0, len = json.length; i < len; i++) 
{ 
    newJSON.push([json[i]]); 
} 

进...

[ 
[Object { rating="0", title="The Killing Kind", more...}], 
[Object { rating="0", title="The Third Secret", more...}] 
] 

小提琴:http://jsfiddle.net/Ta6hW/

有一个简单的方法来做到这一点

用一维的对象,你可以做转换一样容易:

var myarrayfromobject = new Array(); 
$H(myobject).each(function(item, i){ 
    myarrayfromobject[i] = item; 
}); 

如果你有一个多维的对象,你可以使用同样的想法,使用递归函数或循环,验证项目的类型。