如何使以下克隆函数接受多个参数?

时间:2017-07-28 06:55:48

标签: javascript json

我正在构建一个简单的克隆函数:

function clone (value) {
  return JSON.parse(JSON.stringify(value))
}

问题是我还需要这样做:

JSON.parse(JSON.stringify({}, object))

JSON.parse(JSON.stringify({}, value, object))

如何修改我的克隆功能以接受那些额外的参数而不会破坏它?

3 个答案:

答案 0 :(得分:1)

因为我们在包含传递给该函数的所有参数的函数内部都有可论证,所以我们可以这样编码。

function clone (value) {
  return JSON.parse(JSON.stringify(value), arguments[1], arguments[2])
}

如果您可以使用Speads语法。

function clone (value) {
  var arr = arguments.slice();
  arr.shift();
  return JSON.parse(JSON.stringify(value), ...arr)
}

答案 1 :(得分:1)

函数的.apply方法的一个用途是使用参数数组调用它。您可以使用它来解决您的问题。

function clone(...args) {
  return JSON.parse(JSON.stringify.apply(null, args))
}

如果您需要支持不支持spread operator的浏览器,并且出于某种原因无法使用构建工具,则可以使用arguments。但请注意arguments is deprecated

function clone() {
  return JSON.parse(JSON.stringify.apply(null, arguments))
}

答案 2 :(得分:1)



function clone () {
  var s=[];
  for (var i=0; i < arguments.length; i++) {
        s.push(JSON.stringify(arguments[i]));
    }
  return JSON.parse(JSON.stringify(s));
}
console.log(clone({a:'aa'},{b:'bb'},{c:'cc'}))
&#13;
&#13;
&#13;

您可以遍历所有参数并解析JSON。