2013-10-18 52 views
0

我有话如列表:拆分列表为两个数组

ventana - window 
puerta - door 
silla - chair 

现在,我需要把这个分成两个数组:

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

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

+0

您可以发布您的代码那么远?什么地方出了错? – elclanrs

+0

注意:要将一段代码缩进四格,或者选择相关的块并单击编辑窗口上方的“{}”按钮。只能使用''代码,你想要显示在一个句子'这样'内联。 – nnnnnn

+2

你已经知道了逻辑。所有你需要的是一些代码。为什么不尝试一些开始,我们会从那里帮助你 – MarsOne

回答

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]); 
} 

注意,此代码没有错误检查,以确保每一个换行符之间的子竟确实有一对由' - '分开的单词,但我会将它作为一个练习...

+0

不错,简短并且重要。 +1。 –

+0

哇...你快! – opalenzuela

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); 

这是你如何做到的。

+2

这不会像你所期望的那样工作 – Joshua

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]; 
} 

一个单回路,一个单个呼叫到“分裂”,没有递归和无滥用的函数调用。

注:我没有尝试过的代码,只是一个概念。尽管如此,问题应该提供你到目前为止尝试过的东西

+0

+1。我喜欢这个概念。尽管我认为'/ \ n | - /'是你需要的正则表达式。 (我不太喜欢你在循环内改变循环计数器 - 对于for循环,我更喜欢在每次迭代后使用'defs [i + 1]'和'i + = 2')。但是,由于我说,+1。 – nnnnnn

+0

那么,我们其实并没有宣布真正的字符串,但我相信你是对的。 – opalenzuela

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:[]});