我有一个单词列表,如:
ventana - window
puerta - door
silla - chair
现在,我需要将其拆分为两个数组:
var words = ['ventana','puerta','silla'];
var defs = ['window','door','chair'];
我想我可以在换行符处拆分字符串,然后取出新数组并将其拆分为每个' - '。但我不确定如何做到这一点。有人能帮我吗?感谢。
答案 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:[]});