如何检查对象数组是否有值或undefined -Reactjs,Array

时间:2018-06-07 13:54:47

标签: arrays reactjs

我只是试图遍历对象数组,如果值为空且未定义且为null,则应弹出警告消息

有没有简单的方法可以找到数组的对象有值或未定义

试图搜索是否有任何帖子请在这里发帖

任何人都可以帮助我吗

这是下面的截图

这里我只显示我需要循环的对象并检查是否未定义

enter image description here

被修改

handleGobackToBoards =() =>{
const compareWidgetData = this.props.storyboardList.boardList.map((data, key) => {
  if (data.boardId === this.props.selectedBoard.boardId ) {
    data.widgetList.map((widget => {
      if (widget.widgetId) {
        Object.values(widget).map(value => {
          if (value === undefined || value === null || value === "" || value === 0) {
            alert('Empty Data');
          }
          else {
            this.props.manageShowBoard({});
          }
       // });
      }
    }));
  }
});

}

2 个答案:

答案 0 :(得分:2)

如果您想知道是否至少有1个值:

  • undefined null == null
  • 清空=== ""

您应该在对象的值上使用findIndex

if ( -1 !== Object.values(widget).findIndex( v => v == null || v === "") )
    alert("missing value found!");

请注意,find不合适,因为您不知道返回 undefined 时的含义。

[使用您的代码编辑]

您滥用mapmap是您想要返回相同长度的数组并处理其转换元素的时间。这里你的函数什么都不返回。

如果要返回包含较少元素的数组(例如匹配id),请使用filter

如果您想要返回任何其他内容(例如所有元素的总和),请使用reduce

如果您不想返回任何内容(void)并只是循环遍历数组,请使用forEach

如果您想检查某个元素是否包含属性,请使用findfindIndex

据我了解,您的功能可能是:

handleGobackToBoards = () => {
    const boardList = this.props.storyboardList.boardList,
          boardId = this.props.selectedBoard.boardId;
    boardList
        .filter( (data) => data.boardId === boardId ) // Get all board with matching id
        .forEach( (data) => {
            data.widgetList
                .filter( (widget) => widget.widgetId ) // Get all widgets that have an id
                .forEach( (widget) => {
                    if ( -1 !== Object.values(widget).findIndex( v => v == null || v === "") ) {
                        alert('Empty Data');
                    }
                    else {
                        this.props.manageShowBoard({});
                    }
                });
        });
}

[EDIT2]某些与您的代码不同的东西,但我想更接近您想要做的事情:

handleGobackToBoards = () => {
    const boardList = this.props.storyboardList.boardList,
          boardId = this.props.selectedBoard.boardId,
          board = boardList.find( (data) => data.boardId === boardId ); // Get board with matching id
    if (!board)
        return; // No matching board
    const emptyWidget = board.widgetList.find( (widget) => -1 !== Object.values(widget).findIndex( v => v == null || v === "") );
    if (emptyWidget)
        alert('Empty Data');
    // All widgets have no empty property, show board
    this.props.manageShowBoard({});
}

答案 1 :(得分:1)

循环访问小部件数组并遍历每个小部件值以检查每个值:

widgetlist.forEach(widget => {
  Object.values(widget).forEach(value => {
    if (value === undefined || value === null || value === "") {
      console.log('Value ', value, ' of widget', widget, ' is empty'); // if you prefer do an alert 
    }
  });
});