javascript - _.map 和 _.clone 与数组有什么区别?

标签 javascript arrays underscore.js lodash

我有一个对象数组。我需要知道这两行之间的区别:

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/

相关文章:

JavaScript - 使用值作为元素名称推送 JSON 对象

arrays - 如何找到数组中项目之间的联系或关系?

Javascript 语法在 Safari/Webkit 中无效,但在 Chrome/Firefox 中工作正常

javascript - 使用下划线 _.extend 扩展 "new"实例是否合法

javascript - 如何解决“未定义的错误 "Uncaught TypeError: Cannot call method 'changePage”

javascript - 如何在 Chart.js 中绘制日期

python - 将一维字节数组转换为二维 numpy 数组的最快方法

javascript - 如何等待浏览器关闭直到服务器调用完成?

javascript - for循环内的click函数

javascript - 基于值的两个对象数组的交集