将单词和定义的拆分列表分成两个数组

时间:2013-10-18 07:22:28

标签: javascript arrays split

我有一个单词列表,如:

ventana - window
puerta - door
silla - chair

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

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

我想我可以在换行符处拆分字符串,然后取出新数组并将其拆分为每个' - '。但我不确定如何做到这一点。有人能帮我吗?感谢。

4 个答案:

答案 0 :(得分: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]);
}

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

答案 1 :(得分: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”,没有递归,也没有滥用函数调用。

注意:我没有尝试过代码,只是一个概念。然而,问题应该提供您迄今为止尝试过的内容

答案 2 :(得分: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);

你可以这样做。

答案 3 :(得分: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:[]});