基于对象属性创建数组
问题描述:
我想使用一个对象为应用程序配置一些设置。我的想法是先从这样的:基于对象属性创建数组
var obj = {
property_one: 3;
property_two: 2;
property_three: 1;
}
而且我想用这个来结束:
var array = [
'property_one','property_one','property_one',
'property_two','property_two',
'property_three'
]
我目前的解决方案是为每个属性做到这一点:
function theConstructor(){
for(i=1; i <= obj.property_one; i++){
this.array.push('property_one');
};
for(i=1; i <= obj.property_two; i++){
this.array.push('property_two');
};
for(i=1; i <= obj.property_two; i++){
this.array.push('property_two');
};
}
但是这很乏味,因为我可能有很多属性,并且随着应用程序的发展,这些属性可能会发生变化。
我知道可以通过object
的属性这样的循环:
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
array.push(key);
}
}
但是,这将值推到阵列,而不是键(作为一个字符串)。关于如何更有效地做到这一点的任何想法?
答
试试这个
function theConstructor(){
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
for(var i=1; i <= obj[key]; i++){
this.array.push(key);
};
}
}
}
答
var obj = {
property_one: 3,
property_two: 2,
property_three: 1
};
var resultArray = Object.keys(obj).reduce(function(result, curItem) {
for (var index = 0; index < obj[curItem]; index++) {
result.push(curItem);
}
return result;
}, []);
document.write(JSON.stringify(resultArray));
+0
谢谢,这是一个非常优雅的解决方案。 – Joseph
你错过了声明变量'i'。 – FreeLightman
谢谢@FreeLightman修正了它。 –
非常感谢,不知道我怎么没有看到这回头! – Joseph