JavaScript数组声明与切片问题:按URL切片未得到预期结果
问题分析与解决方案
你遇到的核心问题是JavaScript的slice()方法不会修改原数组——它会返回一个新的、经过切片的数组副本,而不是直接改变你调用它的那个数组。所以你现在的代码只是调用了slice(),但没有把返回的新数组赋值回arrList,自然原数组还是完整的。
修复后的代码示例
function retrieveData(data) { let arrList = data.Results.Data; // 把const改成let,因为我们要重新赋值 const urlStr = window.location.pathname; if (urlStr.includes("/states/")) { arrList = arrList.slice(23, 46); // 把slice返回的新数组赋值给arrList console.log(arrList, "Slice"); } else if (urlStr.includes("/countries/")) { arrList = arrList.slice(46, 69); console.log(arrList, "Slice"); } else if (urlStr.includes("/cities/")) { arrList = arrList.slice(69, 90); console.log(arrList, "Slice"); } // 现在arrList在整个函数作用域内都是切片后的结果,可以在这里继续使用它 }
补充说明
为什么之前在条件语句内声明
arrList能正常工作?
因为那时候你是直接把slice()返回的新数组赋值给了条件块内的局部变量arrList,而现在你需要在整个函数作用域复用这个变量,所以必须把新数组重新赋值给外层的arrList。为什么要把
const arrList改成let arrList?
因为const声明的变量不能被重新赋值,而我们需要用切片后的新数组覆盖原来的arrList,所以得用let来声明。
如果你不想修改原数组的引用,也可以额外声明一个变量来存储切片结果,但根据你的需求,直接复用arrList是最直接的方式。
内容的提问来源于stack exchange,提问作者kurtixl
相关产品推荐
相关产品推荐

