2013-12-06 1 views
1

У меня есть массив с CSS текстовых деклараций, как это: ['display: none ', 'opacity: 0.1', ' color: #ff0000']Split массив в пар и упаковывают в объект

Я хочу, чтобы разделить их на ключевой объект/значение записи, так что в конце концов, как это:

{ 
    display: 'none', 
    opacity: 0.1, 
    color: '#ffffff' 
} 

Редактировать: У меня есть рабочий неправильный пример, но он кажется слишком сложным и не служит цели (d'oh). У вас есть рабочий?

cssStyleDeclarations.map(function(item) { 
    var x = item.split(':'); 
    var ret = {}; 
    ret[x[0].trim()] = x[1].trim(); 

    return ret; 
}); 

возвращает его как массив с объектом для каждой записи ([Object, Object, Object]), но я хочу, это как чистый объект.

+6

не кажется слишком сложным для меня ... –

+0

Я согласен, это просто и эффективно. –

+1

Nvm, он даже не работал правильно. Я вернул массив объектов, но он должен просто обслуживать объект с парами ключ/значение. –

ответ

2

Заканчивать Array.prototype. reduce():

var input = ['display: none ', 'opacity: 0.1', ' color: #ff0000']; 
 

 
var css = input.reduce((p, c) => { 
 
    var x = c.split(':'); 
 
    p[x[0].trim()] = x[1].trim(); 
 
    return p; 
 
}, {}); 
 

 
console.log(css);

+1

Фантастический, это то, что я хотел. Благодаря! –