无法读取属性" indexOf'未定义的。为什么不定义?

时间:2018-03-01 16:36:51

标签: javascript

我试图在对象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); }
            }

2 个答案:

答案 0 :(得分:1)

在您收到错误的行card是一系列卡片,而不是卡片本身,因此它没有.powerfulAgainst属性。

答案 1 :(得分:1)

cards是一个数组。要访问其属性,您需要传递index。由于它只是一个对象的数组,并且因为索引从0 cards[0]开始访问第一个对象

var cards = [{
  key: 'aaa',
  counteredBy: [],
  powerfulAgainst: ['bbb']
}]

console.log(cards[0].powerfulAgainst)