2016-02-28 5 views
0

Я хотел бы использовать объект для настройки некоторых параметров для приложения. Моя идея заключается в том, чтобы начать с этого:Создать массив на основе свойств объекта

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 «s, как это:

for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
    array.push(key); 
    } 
} 

Но это будет толкать значения в массив, а не ключом (в виде строки). Любые идеи о том, как я могу сделать это более эффективно?

ответ

2

Попробуйте

function theConstructor(){ 
    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     for(var i=1; i <= obj[key]; i++){ 
     this.array.push(key); 
     }; 
    } 
    } 
} 
+1

Вы пропустили объявить переменную 'i'. – FreeLightman

+0

Спасибо @FreeLightman Исправлено. –

+0

Большое спасибо, не знаю, как я не видел этого, оглядываясь назад! – Joseph

1

Использование Array.prototype.reduce():

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

Смежные вопросы