2011-09-07 27 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