将对象转为数组,添加对象作为新元素

Turn object into array, add object as new element

正在尝试转换对象的对象:

var items: {
    item_a: {
        state: 'item_a status'
    },
    item_b: {
        state: 'item_b status'
    }
};

放入对象数组,同时向对象添加新的数组元素(对象键):

var items = [{
    name: 'item_a',
    state: 'item_a status'
}, {
    name: 'item_b',
    state: 'item_b status'
}];

我天真的尝试是这样的:

var arrayOfItems = [];
for(var x in items){
    var itemObj = {
        name: x
    };
    for(var y in items[x]){
        itemObj[y] = items[x][y];
    }
    arrayOfItems.push(itemObj);
}

我想知道是否有更简洁的方法来做到这一点,也许可以使用一些东西 Underscore/LoDash?

var newItems = _.map(items, function(item, key){
  item.name = key;
  return item;
});
console.log(newItems);

我会为此使用 map()

_.map(items, function(item, key) {
    return _.assign({ name: key }, item);
});
// →
// [
//   {
//     name: 'item_a',
//     state: 'item_a status'
//   },
//   {
//     name: 'item_b',
//     state: 'item_b status'
//   }
// ]

因为 map() 总是 returns 一个数组,你已经完成了一半。你只需要回调来生成你的数组项。您可以使用 assign() 函数设置新的 name 属性,然后添加其余属性。