javascript - 为什么连接和排序方法表现得很奇怪?2 本质上相同的方式不会以相同的方式工作
问题描述
我正在应对 FCC 挑战,学习 JS。这是让我感到困惑的挑战链接。
我有点解决了它,但是一个代码应该可以工作,而其他代码则不能,我认为它们本质上是相同的东西。
这是一个有效的代码:
var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
// Add your code below this line
return [].concat(arr).sort(function(a, b) {
return a - b;
});
// Add your code above this line
}
nonMutatingSort(globalArray);
而且这段代码不起作用
var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
// Add your code below this line
let newArr = [];
newArr.concat(arr);
return newArr.sort(function(a,b){return a-b;});
// Add your code above this line
}
nonMutatingSort(globalArray);
我的问题本质上是为什么?两种代码都将旧数组连接到新数组,并且两个函数都应返回排序后的数组。
然而,在第一个函数连接失败......它只返回空 arr。为什么?我感到很困惑。它在函数之外工作,但不在函数中。
解决方案
concat
不会改变任何现有数组(调用函数的数组或参数列表中的数组)。当您调用 时concat
,您会返回一个新数组。所以,独立声明
newArr.concat(arr);
不做任何事情 - 您newArr
与连接arr
,创建一个新的组合数组,但该组合数组没有分配给任何东西;它被评估然后被丢弃。
const arr1 = ['a'];
const arr2 = ['b'];
// Does not do anything by itself:
arr1.concat(arr2);
console.log(arr1);
console.log(arr2);
将结果分配给newArr
:
newArr = newArr.concat(arr);
var globalArray = [5, 6, 3, 2, 9];
function nonMutatingSort(arr) {
// Add your code below this line
let newArr = [];
newArr = newArr.concat(arr);
return newArr.sort(function(a,b){return a-b;});
// Add your code above this line
}
console.log(nonMutatingSort(globalArray));
// Original array is not mutated:
console.log(globalArray);
或者,newArr
完全避免初始声明,并使用您的原始代码(我更喜欢)。实际上,为了更简洁,您可能只是slice
原始数组,而不是显式创建一个空数组:
var globalArray = [5, 6, 3, 2, 9];
const nonMutatingSort = arr => arr.slice().sort((a, b) => a - b);
console.log(nonMutatingSort(globalArray));
推荐阅读
- asp.net-mvc - 列表
不包含“Patient_Name”的定义,也没有扩展方法“Patient_Name” - uilabel - didSet 未使用异步数据更新 UILabel.text
- javascript - 有没有制作NextJs路由立方体过渡效果的代码?
- vulkan - 在 Vulkan 中重新提交待处理命令缓冲区的用例是什么
- flutter - 带有文本省略号的 FlatButton 溢出
- ruby-on-rails - 是否可以使用活动资源进行交易?
- java - 如何为 m:m 关系编写 jpa 存储库方法?
- powershell - 学生,在创建新用户 powershell 时自动向管理员发送电子邮件
- c++ - 调试模板的问题。专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误的构建失败:模板参数 1 无效
- azure - 如何在单个事务中将一组用于 OCR 分析的图像提交到 Azure 计算机视觉 API?