我有一个对象数组。我需要知道这两行之间的区别:
var clonedObj = _.map(obj, _.clone);
还有这个:
var clonedObj = _.clone(obj);
最终两者返回相同的结果。谁能解释一下其中的区别吗?
最佳答案
不同之处在于,在带有 _.map
的第一个代码段中,您将 _.clone
应用于该数组的每个元素 - - 将每个元素映射到一个新的克隆对象。这意味着对象是一一浅克隆的,因此它们彼此不相等,这意味着它们是内存中的不同对象:
const arr = [
{ foo: 'bar' }
];
console.log(_.map(arr, _.clone)[0] == arr[0]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
另一方面,如果您仅克隆数组,它将浅层克隆该数组,但数组内的元素保持不变,因此克隆数组内的对象具有相同的引用来自原始数组:
const arr = [
{ foo: 'bar' }
];
console.log(_.clone(arr)[0] == arr[0]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
在内部,_.clone
方法使用 structured clone algorithm HTML5 specification中定义。
关于javascript - _.map 和 _.clone 与数组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635553/