我有一个单词列表,例如:
ventana - window
puerta - door
silla - chair
现在,我需要将其拆分为两个数组:
var words = ['ventana','puerta','silla'];
var defs = ['window','door','chair'];
我想我可以在换行符处拆分字符串,然后获取新数组并在每个“ - ”处拆分它。但我不确定该怎么做。有人能帮我吗?谢谢。
我有一个单词列表,例如:
ventana - window
puerta - door
silla - chair
现在,我需要将其拆分为两个数组:
var words = ['ventana','puerta','silla'];
var defs = ['window','door','chair'];
我想我可以在换行符处拆分字符串,然后获取新数组并在每个“ - ”处拆分它。但我不确定该怎么做。有人能帮我吗?谢谢。
“我想我可以在换行符处拆分字符串,然后取出新数组并在每个' - '处拆分它”
是的,如果您的意思是“获取新数组并拆分”其中的每个项目,那将可以正常工作。假设您从这些单词作为字符串开始:
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]);
}
请注意,此代码不会进行错误检查,以确保每个换行符之间的子字符串实际上确实有一对由 分隔的单词' - '
,但我将把它留给你作为练习......
显而易见的算法是将字符串拆分为换行符并迭代每一行,然后用分隔符再次拆分它。
但是,它的更优化版本可能是(假设输入值格式正确):
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”,没有递归,也没有滥用函数调用。
注意:我没有尝试过代码,只是一个概念。不过,这个问题应该提供您到目前为止尝试过的内容。
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);
这就是你可以这样做的方式。
在现代浏览器中,您可以使用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:[]});