2015-10-04 73 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 />'); 
 
}