首页 > 解决方案 > 使用 .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]);

我知道这对你来说可能太简单了,但我问这样我就可以理解这里发生了什么。

标签: javascriptarrays

解决方案


在您的代码中 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]

推荐阅读