我想在Raect中构建一个表,其中包含某个eBay列表中的手表的排序列表。我发现问题出在这行:
entriesObj[value][1][0].listingInfo[0].watchCount[0]
因为有时列表根本没有任何监视,在这种情况下,值watchCount根本不存在,所以我无法遍历它,尽管我尝试使用条件运算符(如果语句使用许多不同的方式)仍然会引发错误。首先,我创建了一个对象:
watcherCount = () => {
return (
this.state.itemList.reduce((watcherObject,item) => {
const watcherKey = item.itemId;
if (!watcherObject[watcherKey]) {
watcherObject[watcherKey] = [item];
} else {
watcherObject[watcherKey].push(item);
}
return watcherObject;
},{})
);
}
现在我试图将它们移动到一个数组([手表数量,清单标题,商品ID])以便对其进行排序:
import React from 'react';
class Watches extends React.Component {
render () {
var entriesObj = Object.entries(this.props.watcherCount);
var sortable = [];
for (var value in entriesObj){
for (var value in entriesObj){
sortable.push([typeof entriesObj[value][1][0].listingInfo[0].watchCount[0] === "undefined" ? "-" : entriesObj[value][1][0].listingInfo[0].watchCount[0], entriesObj[value][1][0].title[0], entriesObj[value][0]]);
}
}
sortable.sort(function(a, b) {
return b[0] - a[0];
});
console.log(sortable);
//Output: Uncaught (in promise) TypeError: Cannot read property '0' of undefined
return <table></table>
}
}
export default Watches;
您是否知道其他任何方法来构建这种精确的数组,或者如何解决缺少属性的问题?
答案 0 :(得分:0)
我不知道我是否完全理解这个问题。
在具有深引用的情况下,如果我不想或不能使用任何条件检查,我只需将对象路径引用放在try catch(最终)块中即可。
例如(尽管未试用)
for (var value in entriesObj){
var val;
try {
// just make sure the only error that might be occuring
// here is an object reference error
// therefore the array push happens after the try catch block
val = entriesObj[value][1][0].listingInfo[0].watchCount[0], entriesObj[value][1][0].title[0], entriesObj[value][0]];
} catch(err) {
val = "-";
// log the error or maybe issue a warning since missing items
// is actually expected behaviour
} finally {
sortable.push(val);
}
}
也许可以解决您的问题。