我将Array.prototype.join
的方法用于多维数组,但是得到了奇怪的结果。我尝试查看Array.prototype.join
的底部实现,它向我展示了本机代码
[1,2,3,4,5,6,7,8].join('')
[1, [2], [3, [4, [5]]], [6, [7, [8]]]].join('');
我希望
的输出[1,[2],[3,[4,[5]]],[6,[7,[8]]]].join('')
成为
12345678
但实际输出是
123,4,56,7,8
答案 0 :(得分:4)
.join
在每个元素上调用.toString()
将其转换为字符串,并且Array.prototype.toString()
默认将其所有元素与,
连接起来。
console.log([1, 2, 3].toString());
答案 1 :(得分:2)
就像其他人已经说过的一样, toString 在数组上被调用。但是,通过提供分隔符,它将仅连接使用该分隔符在其上调用方法的数组。
[
1,
[2],
[3, [4, [5]]],
[6, [7, [8]]]
].join("")
只需将第一级元素连接在一起,对不是字符串的元素调用 toString 。
1.toString() + "" +
[2].toString() + "" +
[3, [4, [5]]].toString() + "" +
[6, [7, [8]]].toString()
其中""
是分隔符。结果为123,4,56,7,8
,其中3,4,5
是第一个嵌套数组,6,7,8
是第二个嵌套数组(具有多个元素)。如果您想加入递归元素,则可以创建自己的方法。
Array.prototype.deepJoin = function (separator) {
return this
.map(e => Array.isArray(e) ? e.deepJoin(separator) : e)
.join(separator);
};
var array = [1, [2], [3, [4, [5]]], [6, [7, [8]]]];
console.log(array.join());
console.log(array.deepJoin());
console.log(array.join(""));
console.log(array.deepJoin(""));
console.log(array.join(" - "));
console.log(array.deepJoin(" - "));
答案 2 :(得分:1)
join
方法还会在每个元素上调用toString()
。
你有
[2].toString() -> 2
[3, [4, 5]].toString() -> 3,4,5
以此类推。数组从不上的toString
方法保留方括号