将对象转为数组,添加对象作为新元素
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
属性,然后添加其余属性。
正在尝试转换对象的对象:
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
属性,然后添加其余属性。