2017-06-23 54 views

回答

2

使用地圖兩次工作得很好。

let a = ['hello', 'my', 'friend']; 

let result = a.map((word) => word.split('') 
.map((letter) => [letter])) 

console.log(result) 
+0

謝謝!它適用於我,它是非常優雅的編碼方式:) – Natali

+0

嗯,你知道我怎麼能推值?我剛剛嘗試'alert(result [0] .push('a')); '但它給了我一個錯誤**'a'類型的參數不能分配給'string'類型的參數** – Natali

+1

@Natali你需要將它改爲'result [0] .push(['a' ])' –

3

這使用spread operator隱含地調用String#[@@iterator]()對於每個單詞,然後map() s各自字符到一個單元長度的數組:

let a = ['hello', 'my', 'friend']; 
 
let b = a.map(word => [...word].map(c => [c])); 
 

 
console.log(JSON.stringify(b));

如果試圖運行此使用打字稿作爲預處理器,您需要調用每個單詞上的一般實現的Array#slice(),因爲它們是類似數組的對象(由於某些原因,Typescript不能識別該對象):

let slice = Function.call.bind(Array.prototype.slice); 
 

 
let a = ['hello', 'my', 'friend']; 
 
let b = a.map(word => slice(word).map(c => [c])); 
 

 
console.log(JSON.stringify(b));

+0

@Natali這裏,在打字稿預處理工作 –

+0

@PatrickRoberts謝謝你,我現在會嘗試你的解決方案:)我不知道之前的解決方案關於這個預處理器的東西,我現在會google的,所以謝謝你兩次;) – Natali

+0

@Natali Typescript是一種預處理語言,用於對JavaScript進行嚴格的打字,這是一種鬆散類型的語言。 –

-1

map命令返回數組 - 所以通過調用一次,你會得到一個字符數組。

a.map(function(item) { return [ item.split('') ]; }) 
// [[["h","e","l","l","o"]],[["m","y"]],[["f","r","i","e","n","d"]]] 

如果您爲每個字符第二次調用映射,則可以將每個項目包裝到一個數組中。

let b = a.map(function(item) { 
    return item.split('').map(function(inner) { 
            return [ inner ]; 
           }); 
}) 
// [[["h"],["e"],["l"],["l"],["o"]]],[[["m"],["y"]]],[[["f"],["r"],["i"],["e"],["n"],["d"]]] 
+1

這是錯誤的,請嘗試運行此操作並將輸出與OP的請求進行比較。 –

+0

這是我的結果''[[[「h」,「e」,「l」,「l」,「o」]],[[「m」,「y」]],[[「f」 「R」, 「I」, 「E」, 「N」, 「d」]]]「'。我無法找到差異 – Zeph

+0

'[[[「h」],[「e」],[「l」],[「l」],[「o」]],[[「m」],[ 「y」]],[[「f」],[「r」],[「i」],[「e」],[「n」],[「d」]]]'真的嗎? –

0

這裏是一個更基本的選項

function convertStringIntoArray(str){ 
    var arr = []; 
    var words = str.split(" "); 
    for(var j=0; j<words.length; j++){ 
     var word = words[j]; 
     var innerArr = []; 
     for(var i=0; i<word.length; i++){ 
      innerArr.push([word.charAt(i)]); 
     } 
     arr.push(innerArr); 
    } 
    return arr; 
}