2011-09-07 59 views
0

我想創建這樣的結構:如何創建一個複雜的JavaScript結構

[{title:'Imágenes', extensions:'jpg,gif,png'}, {title:'Todos', extensions:'*'}] 

,但我需要從一個字符串創建它,以這種方式(以「JS +的jQuery + PHP少見模式」 ):

items = 'Imágenes jpg,gif,png|Todos *'.split('|').each(function() { 
    list(title, ext) = explode(' ', $this); 
    filters[] = array('title' => title, 'ext' => ext); 
}); 

我發現類似的結構:

var theStatus = new Object(); 
function testIt() { 
    theStatus.Home = 'mouseover'; 
    theStatus['Place'] = 'click'; 
    for (var i in theStatus) 
    { 
    alert('theStatus[\''+i+'\'] is ' + theStatus[i]) 
    } 
} 

和類似:

$.alerts = { 
    verticalOffset: -75, 
    horizontalOffset: 0, 
    repositionOnResize: true, 
    overlayOpacity: .01, 
    overlayColor: '#FFF' 
} 

但我不能做任何功能。

在此先感謝。

回答

1

這是我會怎麼做:

items = 'Imágenes jpg,gif,png|Todos *'.split("|").map(function (itemString) { 
    var parts = itemString.split(" "); 
    return { title: parts[0], extensions: parts[1] }; 
}); 

或者,如果你使用jQuery和需要支持舊的瀏覽器,你可以這樣做:

items = $.map('Imágenes jpg,gif,png|Todos *'.split("|"), function() { 
    var parts = this.split(" "); 
    return { title: parts[0], extensions: parts[1] }; 
}); 
+0

你忘了'.split( '|')'的第一行和本地JavaScript'Array.map()'功能僅與新的兼容瀏覽器。 – GregL

+0

固定。在原生不支持它們的瀏覽器中添加映射,減少等等對Array原型非常容易。這些方法非常有用,我會建議任何人總是這樣做。 GitHub上有一個名爲ES5 Shim的項目就是這麼做的。 – KaptajnKold

+0

這種方式也有效,似乎更酷一些:)我會在各種瀏覽器中嘗試「地圖」方式,這樣我就可以看到他們是否支持這種方式,無論如何,GregL的方式對我來說將是一個通用的解決方案: )來自西班牙的感謝! – DavidB

1

你的僞接近。

請嘗試以下香草的javascript:

var str = 'Imágenes jpg,gif,png|Todos *'; 
var objs = str.split('|'); 
var objects = []; 
for (var i = 0; i < objs.length; i++) { 
    var parts = objs[i].split(' '); 
    objects.push({ title: parts[0], extensions: parts[1] }); 
} 
// objects is now an array of custom objects in the format you specified. 
+0

好的,非常感謝,效果很好。 – DavidB