0

我有一个单词列表,例如:

ventana - window
puerta - door
silla - chair

现在,我需要将其拆分为两个数组:

var words = ['ventana','puerta','silla'];
var defs = ['window','door','chair'];

我想我可以在换行符处拆分字符串,然后获取新数组并在每个“ - ”处拆分它。但我不确定该怎么做。有人能帮我吗?谢谢。

4

4 回答 4

2

“我想我可以在换行符处拆分字符串,然后取出新数组并在每个' - '处拆分它”

是的,如果您的意思是“获取新数组并拆分”其中的每个项目,那将可以正常工作。假设您从这些单词作为字符串开始:

var list = 'ventana - window\npuerta - door\nsilla - chair';

然后进行如下操作:

var pairs = list.split('\n'),
    words = [],
    defs = [],
    i, tmp;
for (i = 0; i < pairs.length; i++) {
    tmp = pairs[i].split(' - ');
    words.push(tmp[0]);
    defs.push(tmp[1]);
}

请注意,此代码不会进行错误检查,以确保每个换行符之间的子字符串实际上确实有一对由 分隔的单词' - ',但我将把它留给你作为练习......

于 2013-10-18T07:29:27.483 回答
1

显而易见的算法是将字符串拆分为换行符并迭代每一行,然后用分隔符再次拆分它。

但是,它的更优化版本可能是(假设输入值格式正确):

 var dic = str.split(/[\n\-]/);
 var pos = 0;
 for (var i = 0; i < dic.length; i++) {
     words[pos] = dic[i];
     dic[pos] = defs[++i];
 }

一次循环,一次调用“split”,没有递归,也没有滥用函数调用。

注意:我没有尝试过代码,只是一个概念。不过,这个问题应该提供您到目前为止尝试过的内容。

于 2013-10-18T07:33:40.527 回答
0
var stringYouHave = "ventana - window puerta - door silla - chair";
function getKVPairs(str){
    var a = str.split(" ");
    return a;
}
var kvPairs = getKVPairs(stringYouHave);
var defs= new Array();
var words = new Array();
for(var i = 0 ; i < kvPairs.length;i++){
    var a = kvPairs[i].split("-");
    words.push(a[0]);
    defs.push(a[1]);
}
console.log(words);
console.log(defs);

这就是你可以这样做的方式。

于 2013-10-18T07:29:19.253 回答
0

在现代浏览器中,您可以使用reduce之类的方法:

// assuming `s` is the string

var dict = s.split(/\n/)
            .reduce(function(dict, item) { 
                var terms = item.split(/ - /);

                dict.words.push(terms[0]);
                dict.defs.push(terms[1]);

                return dict;
            }, {words:[], defs:[]});
于 2013-10-18T07:35:49.167 回答