数组过滤undefined


前言:

我们在传递数据的时候,很多时候数据是一个数组,而又有些时候我们并不需要将整个数组传递过去,而是传递数组中的前几个对象;

这时就可以现在这样: method([list[0],list[1],list[2,list[3]]);

(调用父组件传递过来的函数,发送一个数组);

问题:数据都是调用后端接口得来的,而数据这个东西,有时候多,有时候少,多的时候就不说了,反正我们时以下标这样取得,怎么传也只有三条数据,但是数据少的时候问题就来了;

什么问题呢? 通过像这样传递的数据 method([list[0],list[1],list[2,list[3]]),如果数据一旦少于三条。也就是说如果调接口之得到一条数据,但是你这样通过下标传递数据, 那么发送过去的这个数组后两个必定是undefined!

将undefined发送给其他需要的组件,那么是极有可能出问题的,因此我们需要对数据进行处理:在数据为undefined时不发送数据!

哪怕我只发送过去一条实际存在的数据,也不发送undefined,可以少传,可以不传,但不可以发undefined!

试了很多种方法,例如:

// list是我们要发送的数组
// 将list 遍历
{
    const [datas, setDatas] = useState([])
...
const res = await mydatas()
const list = res.data
...
let newArr = []
list.map( (item) => {
    if(item && item!== undefined || item !== null || item !== ''){
        newArr.push(item)
    }
})
    console.log(newArr) // [{item},undefined,undefined] 结果依然没有发生变化,依然发送的是undefined
    setDatas([list[0],list[1],list[2,list[3]])
...
}

解决:

setDatas([list[0],list[1],list[2,list[3]].filter( item => item))
 console.log([list[0],list[1],list[2,list[3]].filter( item => item))  // 返回的新数组种没有undefined!!!
// success

原因:经过filter后会自动去掉undefined、null,空字符串。

var arr = ['1','2',undefined, '3.jpg',undefined, null, ""]
var newArr = arr.filter(item => item)
console.log(newArr)
VM23:3 (3) ["1", "2", "3.jpg"] // 可以看到undefined、null、"" 被去除了

文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录