在Javascript / Typescript

时间:2017-06-23 19:16:45

标签: javascript arrays typescript

我想创建1D的3D数组 我有

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

我试图像这样创建3D数组

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

但没有任何作用..

我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

这使用spread operator为每个单词隐式调用String#[@@iterator](),然后map()将每个字符调用为单位长度数组:



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

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




如果您尝试使用Typescript作为预处理器来运行它,那么您需要在每个单词上调用通用实现的Array#slice(),因为它们是类似于Array的对象(并且由于某种原因,Typecript没有意识到这一点:



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




答案 1 :(得分:2)

使用地图两次就可以了。

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

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

console.log(result)

答案 2 :(得分: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;
} 

答案 3 :(得分:-1)

map命令返回一个数组 - 所以通过调用它会得到一个数组字符。

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

如果您为每个字符第二次调用map,则可以将每个项目包装在一个数组中。

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"]]]