Javascript 未捕获类型错误:无法读取属性';获取';映射函数中null的定义
我找到了一个返回匹配的玩家id的函数Javascript 未捕获类型错误:无法读取属性';获取';映射函数中null的定义,javascript,reactjs,react-redux,immutable.js,Javascript,Reactjs,React Redux,Immutable.js,我找到了一个返回匹配的玩家id的函数 function findPlayerWithID(players, id) { let i = 0; for (; i < players.count(); i++) { if (players.map((degisken) => degisken.get('id'))._tail === undefined) { continue; } if (players.map((degisken) =>
function findPlayerWithID(players, id) {
let i = 0;
for (; i < players.count(); i++) {
if (players.map((degisken) => degisken.get('id'))._tail === undefined) { continue; }
if (players.map((degisken) => degisken.get('id'))._tail.array[i] === id) {
return i;
}
}
return -1;
}
错误是
gameStore.js:38 Uncaught TypeError: Cannot read property 'get' of null
at gameStore.js:38
at immutable.js:3018
at Ue.__iterate (immutable.js:2208)
at r.__iterateUncached (immutable.js:3017)
at F (immutable.js:606)
at r.T.__iterate (immutable.js:322)
at r.toArray (immutable.js:4260)
at new Ue (immutable.js:2067)
at _t (immutable.js:3572)
at Ue.map (immutable.js:4403)
我认为错误是因为空对象
我如何在此行中检查null
if (players.map((degisken) => degisken.get('id')).
immutable.js:1317 Uncaught TypeError: Cannot read property 'merge' of null
at immutable.js:1317
at Ne (immutable.js:1973)
at Ne (immutable.js:1982)
at Ne (immutable.js:1982)
at pe.updateIn (immutable.js:1280)
at pe.mergeIn (immutable.js:1314)
at gameStore.js:207
at createReducer.js:15
at combineReducers.js:133
at c (createStore.js:178)
更新
有了@Canan seaton answear我就换了
这个
这项工作
但它在immutablejs中给出了另一个错误
Uncaught TypeError: Cannot read property 'merge' of null
at immutable.js:1317
at Ne (immutable.js:1973)
at Ne (immutable.js:1982)
at Ne (immutable.js:1982)
at pe.updateIn (immutable.js:1280)
at pe.mergeIn (immutable.js:1314)
at gameStore.js:207
at createReducer.js:15
at combineReducers.js:133
at c (createStore.js:178)
在immutablejs中的这一行
Uncaught TypeError: Cannot read property 'merge' of null
at immutable.js:1317
at Ne (immutable.js:1973)
at Ne (immutable.js:1982)
at Ne (immutable.js:1982)
at pe.updateIn (immutable.js:1280)
at pe.mergeIn (immutable.js:1314)
at gameStore.js:207
at createReducer.js:15
at combineReducers.js:133
at c (createStore.js:178)
函数(m){return typeof m.merge=='function'
我为那个错误感到抱歉
有一些信息,但我不知道该怎么办这是我的控制台
如果您只想检查数组是否包含元素,则可以执行以下操作
if(players&&players.length>0){/*Do Stuff*/}
如果您担心数组中的特定索引为空,那么您可以这样做
if (players.filter(degisken => degisken !== null)
.map((degisken) => degisken.get('id'))._tail === undefined)
{/* Do Stuff */}
通常,检查是否与未定义的
相等不是一个好的做法
我会尝试这样做:
首先,为了确保degisken
确实存在,您可以使用degisken&°isken.get(id)
第二,您可能希望使用对象的hasOwnProperty方法,该方法在这里很有用:
players.map((degisken) => {
const id = degisken && degisken.get('id');
if(id && id.hasOwnProperty('_tail') && id._tail.array[i] === id){
return i
}
});
如果你想将玩家映射到他们的id,那么你应该使用一个对象而不是一个数组,该数组的键是玩家id,值是一个包含玩家数据的对象。你的错误表明玩家数组中有null
值,这是我想象不到的。@trixn谢谢..我现在编辑了这个问题,它给出了immutableJS errorThank.filter是有效的。我现在编辑了这个问题,它给immutableJS errorwith@matmiz answear it work和immutable not give error谢谢
players.map((degisken) => {
const id = degisken && degisken.get('id');
if(id && id.hasOwnProperty('_tail') && id._tail.array[i] === id){
return i
}
});