javascript - 使用 .map() 错误地创建排序数组
问题描述
Set()
我尝试使用我学到的一些工具来制作一些可以使用的东西。它起作用了,但我注意到了一个错误:它对我的数组进行了排序!请有人解释一下为什么?
这是我的代码:
function uniteUnique(...arr) {
let array = arr.flat()
let newArr = [];
console.log(array) // [ 1, 3, 2, 5, 2, 1, 4, 2, 1 ]
let myMap = array
.map(elem => {
if (!newArr.includes(elem))
return newArr.push(elem)
})
.filter(Boolean)
console.log(myMap) // [ 1, 2, 3, 4, 5 ]
}
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
我知道这对你来说可能太简单了,但我问这样我就可以理解这里发生了什么。
解决方案
在您的代码中 MyMap 将您的 newArr 长度保存为 array.push 返回数组的长度,因此每次它返回计数:例如,如果您尝试运行此代码
let newArr = []
console.log(newArr.push(20)) // the output is 1
这就是你的 myMap 所持有的 => 你的 newArr 的长度
所以如果你想要过滤后的数组,你应该使用 newArr
let array = [ 1, 3, 2, 5, 2, 1, 4, 2, 1 ]
let newArr = [];
let myMap = array.map(elem => {
if (!newArr.includes(elem))
return newArr.push(elem)
}).filter(Boolean)
console.log(newArr) //[1, 3, 2, 5, 4]
推荐阅读
- javascript - 如何在本机反应中创建带有声音的警报?
- windows - Windows RPC - 如何在服务器中检索客户端指定的预期主体名称?
- flutter - Flutter Provider:无法从提供者的列表中删除项目
- python - 简化代码以查找最后一次出现的值
- bitrix - 将特定时间添加到截止日期
- bash - 在预提交挂钩期间,npm 包在自定义 bash 脚本中不起作用
- javascript - WebPack:Require 未定义:module.exports = require("events");
- javascript - 用正则表达式替换字符串
- javascript - 如何在从 eval() 返回之前等待回调?
- python - 使用 Numpy 进行 Kmean 聚类