为什么在这种情况下排序会修改原始
Why is sorting modifing the original in this case?
我在更改原始数组时遇到了一个问题,奇怪的是添加arr.join("...").split("...")
似乎可以防止这种情况:
一点背景:
- 我的脚本创建并向
array
添加内容 - 该数组初始化为空,与
arr=[]
类似 - 通过
arr[index] = "..."
添加的东西 - 那么我想要一份
arr
的副本,但要排序 - 当我进行排序时,原始
arr
被修改
以下是正在发生的事情的简化版本:
var arr=[], sorted;
arr[0] = "hello";
arr[1] = "world";
//buggy, the original is sorted
//sorted = arr.sort(function(a,b){return (a.length-b.length);});
sorted = arr.join("improbableCollision").split("improbableCollision").sort(function(a,b){return (a.length-b.length);});
- 为什么添加
.join("*").split("*")
可以解决问题 - 问题出在哪里
- 有没有更优雅的方法来解决这个问题
对于完整的脚本,请检查这个jsFiddle
要在不进行所有连接和拆分的情况下进行排序,请使用slice或concat:复制数组
var sort=arr.slice(0).sort()
这之所以有效,是因为join()然后split()操作会生成原始数组的副本。
相关文章:
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 修改后的原始数组值
- jquery下拉菜单修改所选文本,但在后续单击时显示先前所选文本的原始值
- 为什么数组上的 js 映射会修改原始数组
- 从作为参数传入的数组中删除对象不会修改原始数组 (Angular)
- 如何在传单中编辑多边形后获得修改和原始的geojson点
- 遍历 Javascript 正则表达式匹配以修改原始字符串
- 如何实现一个插件,它只在需要时修改原始模块
- 通过javascript获取原始/未修改的请求字符串
- 在 javascript 中的原始对象中修改
- 为什么在这种情况下排序会修改原始
- 无法获得修改后的fabic.js对象的旋转角度以报复原始角度
- 使用forEach、映射或筛选器克隆和操作嵌套对象,而不修改原始对象
- 修改函数内部的JavaScript对象,如果出现错误,则返回原始对象
- 原始字符串是否始终保持未修改
- 使用jQuery在原始值的基础上修改每个文本字段的值
- 对象/数组方法:修改原始的还是创建新的?指导方针
- 是否有可能在不修改原始代码的情况下向现有javascript函数添加一些代码?
- 如何替换数组元素而不修改原始数组并创建副本