Array.map函数返回未定义或[未定义]

时间:2020-10-06 09:06:53

标签: javascript arrays reactjs

嘿,我在这里有些困惑。我在做什么错了,外部数组中的对象数组看起来像这样:

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(() => {
    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

2 个答案:

答案 0 :(得分:1)

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

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;

    }
   }
 })
})

答案 1 :(得分:0)

在地图的开关盒内添加return语句