如何检查对象数组是否有值或未定义-Reactjs,数组
2018-06-07
3161
2个回答
如果您想知道是否至少有 1 个值:
-
undefined
或
null
(
== null
) -
或
empty
(
=== ""
)
您应该对对象的值使用
findIndex
。
if ( -1 !== Object.values(widget).findIndex( v => v == null || v === "") )
alert("missing value found!");
请注意,
find
并不合适,因为当它返回
undefined
时,您不知道它意味着什么。
[使用您的代码进行编辑]
您误用了
map
。
map
是当您想要返回相同长度的数组并处理其转换后的元素时使用的。在这里,您的函数什么也不返回。
如果您想要返回一个包含较少元素的数组(例如匹配一个 id),请使用
filter
。
如果您想要返回其他任何内容(例如所有元素的总和),请使用
reduce
。
如果您不想返回任何内容(void)并且只循环遍历数组,请使用
forEach
。
如果您想检查某个元素是否具有属性,请使用
find
或
findIndex
。
据我所知,您的函数可能是:
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({});
}
RaphaMex
2018-06-07
循环小部件数组并循环遍历每个小部件的值以检查每个值:
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
}
});
});
Rodius
2018-06-07