如何解析数组并使用已解析的值创建新数组?

时间:2011-05-26 22:52:16

标签: javascript arrays

我有一个数组

var data = new Array("1111_3", "1231_54", "1143_76", "1758_12");

现在我想解析数据[0]以获得1111。

var ids = new Array();
// example: ids = Array("1111", "1231", "1143", "1758");

并将所有ID从数据复制到ids数组。

可以像在php中那样做,还是需要使用循环?

感谢。

4 个答案:

答案 0 :(得分:3)

非常简单:

var ids = [];
for(var i = 0, j = data.length; i < j; ++i) {
   var idString = data[i];
   ids.push(idString.substring(0, idString.indexOf('_')));
}

答案 1 :(得分:2)

优雅:

data.map(function(x){
    return x.split('_')[0];
})

这是ECMA-262标准的一部分。

但是,如果您关心支持旧的过时的低级浏览器,请使用jQuery(或您使用的任何其他框架;几乎所有框架都定义了自定义map功能):

$.map(data, function(x){
    return x.split('_')[0];
})

答案 2 :(得分:0)

您想要做的事情称为“地图”。 有些浏览器支持它们,但如果你想要安全,可以使用underscore.js(http://documentcloud.github.com/underscore/)

你最终得到了:

_(data).map(function(x){
    return x.split('_')[0];
});

_.map(data, function(x){
    return x.split('_')[0];
});

答案 3 :(得分:0)

如果你有一个真正大数组,将它连接到字符串并拆分字符串可能会更快,而不是使用任何迭代方法逐个形成它。

var data = ["1111_3", "1231_54", "1143_76", "1758_12"];

var ids= data.join(' ').replace(/_\d+/g,'').split(' ');

alert(ids)

/*  returned value: (Array)
1111,1231,1143,1758
*/