2013-10-18 80 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:[]});