前言:
我们在传递数据的时候,很多时候数据是一个数组,而又有些时候我们并不需要将整个数组传递过去,而是传递数组中的前几个对象;
这时就可以现在这样: 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、"" 被去除了