2016-09-28 41 views
0

我有一个函数,它接受Array,遍历它找到所有Objects并将它们显示到UI。如何在JavaScript中将对象安全地包装到数组中

在罕见的情况下,我必须提供一个Object(从WSapplication/JSON结果),这是一个不通过Array默认因此我的函数失败遍历它与显示在UI上。

在正常情况下,我Array看起来是这样的:

[ 
    { "name" : "foo"}, 
    { "name" : "bar"}, 
    { "name" : "baz"} 
] 

,这就像它应该。但是,有时我得到的数据可能是这样的:

{ "name" : "I am not in a List"} 

和我的函数,它在阵列是这样的:

function loadJSONIntoUI(data) { 

    for (var aMsg = 0; aMsg < data.length(); aMsg++) { 
     // Do something with each `index` in the List 
    } 
} 

有没有一种办法可以检测到单个对象,它是不是一个数组是一个奇怪的,并可能将它放入一个List中并将其传递给一个函数?

到目前为止,我曾尝试使用typeof,也试图动态创建和push我的对象到一个新的Array但它打印出一个1,当我做到这一点。

+0

是数组内的单个项目?如果不是,你可以检查[变量是一个数组](http://stackoverflow.com/questions/4775722/check-if-object-is-array)。如果是,你可以检查'array.length == 1'。 –

+0

它不是一个列表,它是一个数组......在js中它们是一种特殊的对象,所以如果你编写对象方法,它们也可以用于数组 –

+0

'List'在JavaScript中被称为_array_。另外'JSON'是_text data_ - 因为它代表“JavaScript Object Notation”,所以如果它已经在JavaScript中,它就是一个对象。 – vlaz

回答

3

你如果不改造它在阵列中,让一个迭代时间:

function loadJSONIntoUI(data) { 

    if(!(data instanceof Array)){ 
     data = [data]; 
    } 

    for (var aMsg = 0; aMsg < data.length; aMsg++) { 
     // Do something with each `index` in the List 
    } 
} 

而且,长度不需要被称为一种方法。

让我知道,如果它

干杯

2

Array.isArray可以用来实现你需要的东西:

function loadJSONIntoUI(data) { 
    if(!Array.isArray(data)) { 
     data = [data]; 
    } 
    for (var aMsg = 0; aMsg < data.length(); aMsg++) { 
     // Do something with each `index` in the List 
    } 
} 
+0

供参考:这仅适用于IE9 + https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray –

1

您需要检查的数组,并修复错误 - 应该只是data.length,无支架。请参阅下面的代码,检查演示 - https://fiddle.jshell.net/ermakovnikolay/fgedaubm/

function loadJSONIntoUI(data) { 
    var data = Array.isArray(data) ? data : [ data ]; 
    for (var aMsg = 0; aMsg < data.length; aMsg++) { 
     // Do something with each `index` in the List 
     console.log(data[aMsg]); 
    } 
} 
+0

再次:FYI:这只适用于IE9 + https://developer.mozilla .org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray –

+0

谢谢R.Chapelli! –

相关问题