javascript,添加数组"around"对象

javascript, add array "around" object

我一直在寻找这个问题的答案,但似乎找不到任何答案,如果已经有答案,我深表歉意。

我期待一个对象,让我们这样说:

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

问题是每当 "items" 中只有一个对象时,它看起来像这样:

{
    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'
            }
        ]
    }
}

我无法确定 items 是对象数组还是只是一个对象(在这两种情况下 typeof items 都将 return "object"),以及如何将其转换为数组它不是一个数组。非常感谢帮助或提示

如果需要,您可以用数组包装项目,例如:

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

     .
     .
     .

   });

使用 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 />');
}

除了其他答案之外,我只提供这个,因为我认为它们不够清楚。

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

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

这些步骤可以合并,如 CD.. 的回答