繁体   English   中英

Array.map 函数返回 undefined 或 [undefined]

[英]Array.map function returns undefined or [undefined]

嘿伙计们,我在这里有点困惑。 我在做什么错我在一个看起来像这样的外部文件中有对象数组:

import moment from "moment";

export default [{
    filterOn: "startDate",
    startDate: moment("01/01/2013", "DD/MM/YYYY").startOf("day"),
    endDate: moment().startOf("day")
}];

然后我通过props导入我的数组,例如: props.datePickerDefinition

到一个单独的文件中,我正在获取数组,并尝试通过useStatesetState将数组中的值提取到某些状态

const [fromToDatePickerColumn, setFromToDatePickerColumn] = useState();
const [dateFrom, setDateFrom] = useState();
const [dateTo, setDateTo] = useState();

我的目标是使用useEffect函数并使用useEffect更新这三个元素的状态:

  useEffect(() => {
    props.datePickerDefinition.map((date) => {
        switch (typeof date) {
            case 'string':
                setFromToDatePickerColumn(date.fromToDatePickerFilterOn)
            break;

            case'moment' :
                setDateFrom(date.startDate)
                setDateTO(date.endDate)

        }
    })
})

所以我首先有两个问题。 我可以使用switch盒来检查矩对象吗? 第二个也是最重要的一个是为什么当我从.map函数中提取值时我收到undefined ,但是如果我通过props.datePickerDefinition.map((date) => console.log(date))检查值我看到它 。 有人能帮我一把吗,我会很感激地了解我做错了什么。

我尝试过.forEach函数:

 const array1 = [{first:'a', second:'b', third:'c'}]; const test = array1.forEach(element => element.first); console.log(test)

还有 .map :

 const array1 = [{first:'a', second:'b', third:'c'}]; const test = array1.map(element => element.first); console.log(test)

但在这种情况下,它返回我["a"]并且我只需要值而不是Array

您需要再次迭代日期以设置状态。 但是地图不适合这里。 试试下面的代码:

useEffect(() => { 

 props.datePickerDefinition.forEach(date =>{
   for(let key in date){
     const dateItem = date[key];
     switch (typeof dateItem) {
      case 'string':
          setFromToDatePickerColumn(date.filterOn);
      break;

      case 'object' :
          setDateFrom(date.startDate);
          setDateTo(date.endDate);
          break;
      default: break;

    }
   }
 })
})

在地图中的 switch case 内添加 return 语句

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM