我试图在对象indexOf
内对数组powerfulAgainst
进行card
。
当我console.log(key)
时,会返回aaa。
console.log(card)
返回
[ { key: 'aaa',
counteredBy: [],
powerfulAgainst: [ 'bbb' ] } ]
最后,console.log(card.powerfulAgainst)
会返回undefined
(即使根据console.log(card)
也不应该这样做)。因此,我显然得到TypeError: Cannot read property 'indexOf' of undefined
错误。
为什么会这样?
var counters = originalCard["counteredBy"];
var powerfuls = originalCard["powerfulAgainst"];
counters.forEach(key => {
var card = cards.filter(function (obj) {
return obj.key == key;
})
if(card.length > 0) {
if(card.powerfulAgainst.indexOf(key) < 0) {
card.powerfulAgainst.push(key);
} else { console.log(card.key + " is already powerful against " + key); }
}
答案 0 :(得分:1)
在您收到错误的行card
是一系列卡片,而不是卡片本身,因此它没有.powerfulAgainst
属性。
答案 1 :(得分:1)
cards
是一个数组。要访问其属性,您需要传递index
。由于它只是一个对象的数组,并且因为索引从0 cards[0]
开始访问第一个对象
var cards = [{
key: 'aaa',
counteredBy: [],
powerfulAgainst: ['bbb']
}]
console.log(cards[0].powerfulAgainst)