2015-10-04 41 views
1

我一直在尋找這個答案,但似乎無法找到任何,我很抱歉,如果已經有一個。javascript,添加數組「圍繞」對象

我期待的對象,讓我們說這樣的事情:

{ 
    name: 'myname', 
    items: [ 
     { 
      itemID: '1' 
     }, 
     { 
      itemID: '2' 
     }, 
     { 
      itemID: '3' 
     } 
    ] 
} 

的問題是,每當有內部「項目」只有一個對象,它看起來像這樣:

{ 
    name: 'myname', 
    items: { 
     itemID: '1' 
    } 
} 

這意味着我的forEach函數將會中斷,因爲「items」不再是對象數組。在forEach中的每個「items」對象中都有大量的數據和事情完成,因此我寧願不必使用forEach和另一個函數,而是將其轉換爲數組並僅使用forEach。

這就是我想做的事:

if (items is not array) { 
    //Convert the object to this: 
    { 
     name: 'myname', 
     items: [ 
      { 
       itemID: '1' 
      } 
     ] 
    } 
} 

我有問題,以確定項目的對象數組或只是一個對象(在這兩種情況下的typeof項目將返回「對象」),並且還如果它不是數組,則如何將其轉換爲數組。非常感謝幫助或提示

+2

可以使用這樣的事情看到相結合http://stackoverflow.com/questions/4775722/check-if-object-is-array,或者如果您使用jQuery,則使用'$ .isArray'。 – mic4ael

+0

或類似的東西https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray –

+1

我強烈建議你保留對象的格式,我懷疑它是響應從一個API的服務器是恆定的是否有一個或多個元素。如果你不能控制API,那麼你必須迭代對象並檢查元素是否是數組或對象。 – Tushar

回答

1

我只提供這個除了其他答案,因爲我認爲他們不夠清楚。

var items = obj.items; 
if(! Array.isArray(items)){ 
    items = [items]; 
} 

items.forEach(function(){ 
    // iterate over each item 
}); 

這些步驟可以爲CD..的回答

1

您可以根據需要使用數組包裹項目,例如:

(Array.isArray(obj.items) ? obj.items : [obj.items]). 
    forEach(function(item){ 

    . 
    . 
    . 

    }); 
+1

這是一個很好的單行答案,但Andreas可能難以理解無解釋的符號:CD使用一個三元來始終以數組形式返回時間,並使用'forEach'語法立即迭代該數組。三態操作結尾的'.'非常重要,因爲它是點符號sigil,它告訴JS引擎'forEach'是數組的屬性或方法。 – vol7ron

1

使用Array.isArray(obj)進行檢查,如果vararray

如:

var object1 = { 
 
    name: 'myname', 
 
    items: [{ 
 
    itemID: '1' 
 
    }, { 
 
    itemID: '2' 
 
    }, { 
 
    itemID: '3' 
 
    }] 
 
}; 
 

 
var object2 = { 
 
    name: 'myname', 
 
    items: { 
 
    itemID: '1' 
 
    } 
 
}; 
 

 

 
if (Array.isArray(object1.items)) { 
 
    document.write('Hey guy I\'m an array!<br />'); 
 
} else { 
 
    document.write('Hey guy I\'m not an array!<br />'); 
 
} 
 

 
if (Array.isArray(object2.items)) { 
 
    document.write('Hey guy I\'m an array!<br />'); 
 
} else { 
 
    document.write('Hey guy I\'m not an array!<br />'); 
 
}