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

时间:2015-05-14 14:31:58

标签: javascript functional-programming underscore.js lodash

尝试转换对象的对象:

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?

2 个答案:

答案 0 :(得分:1)

我会使用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()总是返回一个数组,所以你就到了一半。您只需要回调来生成数组项。您可以使用assign()函数设置新的name属性,然后添加其余属性。

答案 1 :(得分:0)

RAC(self.headline, text) = RACObserve(self.viewModel, mainCourse);