我想创建1D的3D数组 我有
let a = ['hello', 'my', 'friend']
我试图像这样创建3D数组
b = [[['h'], ['e'], ['l'], ['l'], ['o']], [['m'], ['y']], [['f'], ['r'], ['i'] ,['e'], ['n'], ['d']]]
但没有任何作用..
我怎么能这样做?
答案 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"]]]