Chciałbym utworzyć tablicę 3D 1D

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

I próbowałem stworzyć tablicę 3D w ten sposób

b = [[['h'], ['e'], ['l'], ['l'], ['o']], [['m'], ['y']], [['f'], ['r'], ['i'] ,['e'], ['n'], ['d']]]

Ale nic nie działa.

Jak mogę coś zrobić?

0
Natali 23 czerwiec 2017, 22:16

4 odpowiedzi

Najlepsza odpowiedź

Używanie mapy dwa razy działa dobrze.

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

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

console.log(result)
2
toskv 23 czerwiec 2017, 19:20

Mapa Polecenie zwraca tablicę - Dzwoniąc do nim, gdy otrzymasz znaki tablic.

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

Jeśli wywołujesz mapę po raz drugi dla każdej postaci, możesz owinąć każdy element w tablicy.

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
Zeph 23 czerwiec 2017, 20:10

Oto bardziej podstawowa opcja

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;
} 
0
stackoverfloweth 23 czerwiec 2017, 19:22

Wykorzystuje to Spread Operator do domyślnego wywołania String#[@@iterator]() Dla każdego słowa, a następnie {{x1} } s Każdego znaku do tablicy jednostkowej:

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

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

Jeśli próbujesz uruchomić to za pomocą maszynografii jako preprocesora, musisz zadzwonić do generowanego wdrożenia Array#slice() na każdym słowie, ponieważ są one obiektami podobnymi do tablicy (i z jakiegoś powodu maszynozistki nie rozpoznaje tego):

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));
3
Patrick Roberts 23 czerwiec 2017, 19:43