4

我在代码中看到了传播语法的几种用法。例如:

function tree2table(tree) {
    var children = tree["children"];
    if (children === undefined) return [];
    var result = [];
    for (var i = 0; i < children.length; i++) {
        var child = children[i];
        var link = [child["name"], tree["name"], child["size"]];
        result.push(link);
        result.push(...tree2table(child))
    }
    return result
}

但是,IE 不支持扩展语法。有谁知道改变它以result.push(...tree2table(child))使其成为跨浏览器并像以前一样高效的最佳方法是什么?

4

2 回答 2

8

您可以使用function#apply,它将参数作为数组。

apply()方法调用具有给定this值的函数,并arguments作为数组(或类似数组的对象)提供。

Array.prototype.push.apply(result, tree2table(child));
于 2017-08-23T11:16:11.827 回答
5

差异

Array.prototype.push.apply(result, values)修改而不是制作数组的副本

例子

const result = []
const values = ['a', 'b']
Array.prototype.push.apply(result, values)
console.log(result)

解决方案

function tree2table(tree) {
  var children = tree["children"];
  if (children === undefined) return [];
  var result = [];
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var link = [child["name"], tree["name"], child["size"]];
    result.push(link);
    Array.prototype.push.apply(result, tree2table(child))
  }
  return result
}

兼容的

基于版本信息

支持以下文档模式:Quirks、Internet Explorer 6 标准、Internet Explorer 7 标准、Internet Explorer 8 标准、Internet Explorer 9 标准、Internet Explorer 10 标准、Internet Explorer 11 标准。

于 2017-08-23T11:21:17.300 回答