javascript,添加数组“围绕”对象
我一直在寻找这个答案,但似乎无法找到任何,我很抱歉,如果已经有一个。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项目将返回“对象”),并且还如果它不是数组,则如何将其转换为数组。非常感谢帮助或提示
我只提供这个除了其他答案,因为我认为他们不够清楚。
var items = obj.items;
if(! Array.isArray(items)){
items = [items];
}
items.forEach(function(){
// iterate over each item
});
这些步骤可以为CD..的回答
您可以根据需要使用数组包裹项目,例如:
(Array.isArray(obj.items) ? obj.items : [obj.items]).
forEach(function(item){
.
.
.
});
这是一个很好的单行答案,但Andreas可能难以理解无解释的符号:CD使用一个三元来始终以数组形式返回时间,并使用'forEach'语法立即迭代该数组。三态操作结尾的'.'非常重要,因为它是点符号sigil,它告诉JS引擎'forEach'是数组的属性或方法。 – vol7ron
使用Array.isArray(obj)进行检查,如果var
是array
如:
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 />');
}
可以使用这样的事情看到相结合http://stackoverflow.com/questions/4775722/check-if-object-is-array,或者如果您使用jQuery,则使用'$ .isArray'。 – mic4ael
或类似的东西https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray –
我强烈建议你保留对象的格式,我怀疑它是响应从一个API的服务器是恒定的是否有一个或多个元素。如果你不能控制API,那么你必须迭代对象并检查元素是否是数组或对象。 – Tushar