无JSON或变量赋值的Javascript deepcopy 我有一个问题: 我从一本JS书中学习了一些挑战性练习,我不知道该怎么做,也没有示例答案。其目的是使用*仅ES6*的箭头函数编写深度复制函数,而不使用任何JSON方法或任何变量赋值。作者还建议不要使用{}括号中的作用域。有关如何执行此操作的任何提示或提示?

无JSON或变量赋值的Javascript deepcopy 我有一个问题: 我从一本JS书中学习了一些挑战性练习,我不知道该怎么做,也没有示例答案。其目的是使用*仅ES6*的箭头函数编写深度复制函数,而不使用任何JSON方法或任何变量赋值。作者还建议不要使用{}括号中的作用域。有关如何执行此操作的任何提示或提示?,javascript,function,ecmascript-6,Javascript,Function,Ecmascript 6,您可以使用Object.keys()和Object.values()获取键和值的数组,然后迭代这些项并将其分配给新对象,请尝试以下操作: let obj={key1:'value1',key2:'value2'}; 设keys=Object.keys(obj); 让值=对象值(obj) console.log(键、值) 设newObj={}; for(设i=0;i({…acc,[k]:deepCopy(v)}),{}): //否则,只需返回值 v log(deepCopy({foo:'bar'

您可以使用Object.keys()和Object.values()获取键和值的数组,然后迭代这些项并将其分配给新对象,请尝试以下操作:

let obj={key1:'value1',key2:'value2'};
设keys=Object.keys(obj);
让值=对象值(obj)
console.log(键、值)
设newObj={};
for(设i=0;iconsole.log(newObj)您可以使用Object.keys()和Object.values()获取键和值的数组,然后迭代这些项并将其分配给新对象,请尝试以下操作:

let obj={key1:'value1',key2:'value2'};
设keys=Object.keys(obj);
让值=对象值(obj)
console.log(键、值)
设newObj={};
for(设i=0;iconsole.log(newObj)创建一个接受值并返回其副本的递归函数。检查值的类型。如果是数组,则返回一个新数组,该数组将每个元素映射到该函数的递归调用。如果是对象,请使用其属性的副本创建新对象。如果它是基元(字符串、数字、布尔…),只需返回它

另一方面,在没有任何变量赋值的情况下写这篇文章&花括号可能是学习的乐趣,但它会使文章的可读性大大降低。我决不会在工作中这样写:

const deepCopy=v=>
//它是一个数组吗?
数组的v实例?
//如果是,则将每个值映射到其副本
v、 地图(副本):
//否则,它是非空对象吗?
(typeof v==“对象”&&v!==null)?
//如果是,请使用其特性值的副本创建新对象
对象.条目(五)
.reduce((acc,[k,v])=>({…acc,[k]:deepCopy(v)}),{}):
//否则,只需返回值
v
log(deepCopy({foo:'bar',arr:[{baz:42},true]}));
日志(deepCopy(“helloworld”);

log(deepCopy([“a”,“b”,null])创建一个接受值并返回其副本的递归函数。检查值的类型。如果是数组,则返回一个新数组,该数组将每个元素映射到该函数的递归调用。如果是对象,请使用其属性的副本创建新对象。如果它是基元(字符串、数字、布尔…),只需返回它

另一方面,在没有任何变量赋值的情况下写这篇文章&花括号可能是学习的乐趣,但它会使文章的可读性大大降低。我决不会在工作中这样写:

const deepCopy=v=>
//它是一个数组吗?
数组的v实例?
//如果是,则将每个值映射到其副本
v、 地图(副本):
//否则,它是非空对象吗?
(typeof v==“对象”&&v!==null)?
//如果是,请使用其特性值的副本创建新对象
对象.条目(五)
.reduce((acc,[k,v])=>({…acc,[k]:deepCopy(v)}),{}):
//否则,只需返回值
v
log(deepCopy({foo:'bar',arr:[{baz:42},true]}));
日志(deepCopy(“helloworld”);

log(deepCopy([“a”,“b”,null])创建一个接受值并返回其副本的递归函数。检查值的类型。如果它是基元(字符串、数字、布尔…),只需返回它。如果是数组,则返回一个新数组,该数组将每个元素映射到该函数的递归调用,如果是对象,则对每个属性执行相同的操作。如果在ES6中遇到问题,请先在ES5中使用它,直到它正常工作,然后尝试“翻译”它,但这应该不会太难。我在ES5中实现了它,但三元数有点让我难以理解,因为我不确定如何处理返回值。我也看到了你下面的帖子。它按预期工作,我看到您使用嵌套ternaries(ternaries?)创建了一个递归函数,该函数接受一个值并返回它的一个副本。检查值的类型。如果它是基元(字符串、数字、布尔…),只需返回它。如果是数组,则返回一个新数组,该数组将每个元素映射到该函数的递归调用,如果是对象,则对每个属性执行相同的操作。如果在ES6中遇到问题,请先在ES5中使用它,直到它正常工作,然后尝试“翻译”它,但这应该不会太难。我在ES5中实现了它,但三元数有点让我难以理解,因为我不确定如何处理返回值。我也看到了你下面的帖子。它按预期工作,我看到了您使用嵌套ternaries(ternaries?)所做的工作。让obj={foo:{bar:42}
怎么样?(内部对象不是副本,而是对原始对象的引用)让obj={foo:{bar:42}
怎么样?(内部对象将不是副本,而是对原始对象的引用)