为什么String()使JS中的数组变平?

时间:2019-02-14 17:30:07

标签: javascript arrays string

我很惊讶地发现将String构造函数应用于数组时的扁平化行为。

为什么这样做。这是展平数组的好方法吗?

在Mac Chrome,Safari,Firefox上测试结果相同。

String(['a', 'b', ['c', 'd', ['e', 'f']]])

=> "a,b,c,d,e,f"

4 个答案:

答案 0 :(得分:4)

它叫Array.prototype.toString-仅此而已。

答案 1 :(得分:4)

因为将数组转换为字符串将调用.toString,与调用.join()基本上相同,后者将调用.toString到数组中的所有元素,然后删除结果用逗号。因此,将数组递归地连接到字符串,结果看起来很平坦,因为没有用于数组开始或结束的指示符。 这是逐步的转换:

 [[1, 2, 3], [1, 2, 3]].toString()
 [1, 2, 3].toString() + "," + [1, 2, 3].toString()
 (1 + "," + 2 + "," + 3) + "," + (1 + "," + 2 + "," + 3)
 "1,2,3" + "1,2,3"
 "1,2,3,1,2,3"

答案 2 :(得分:1)

它不会修饰数组,而是从数组中产生一个字符串。 要获得更好的选择,请查看Array.flat或例如lodash flattern()(或UnderscoreRambda)之类的库。

答案 3 :(得分:0)

这不是将数组转换为字符串的唯一方法。通常首选JSON.stringify

const arr = [1,[2,[3]]];
console.log(JSON.stringify(arr));

它似乎“弄平”列表的原因是它String在整个数组上被递归调用:

const arr = [1,[2,[3]]];

console.log(
  String(arr)
);
console.log(
  String(arr[0]),
  '+ , +',
  String(arr[1])
);
console.log(
  String(arr[0]),
  '+ , +',
  String(arr[1][0]),
  '+ , +',
  String(arr[1][1])
);