Javascript forEach数组方法不更改对象属性

时间:2016-02-12 23:46:36

标签: javascript arrays foreach

很抱歉,对某些人来说这可能是显而易见的,但有人可以向我解释为什么click事件调用的此函数不会将数组中的当前元素作为具有state属性的对象:' active& #39;,将其更改为null,然后获取数组中的下一个元素,也就是一个对象,并将其state属性更改为' active',而是抛出类似&#39的错误消息;不能设置属性' state'未定义'?

提前谢谢!

var array = [{
    state : 'active'
}, {
    state : null
}, {
    state : null
}];

document.addEventListener('click', function() {
    array.forEach(function(element, index, array) {
        if(element.state === 'active') {
            element.state = null;
            array[index+1].state = 'active';
        }
    });
});

1 个答案:

答案 0 :(得分:0)

问题不在于它没有这样做,它确实这样做,但随后循环继续,现在下一个元素是“活动的”。它执行此操作直到最后一个元素抛出并出现错误,因为您正在尝试访问不在数组中的索引。

试试这个:

var i = null;
array.forEach(function(element, index, array) {
    if(element.state === 'active') {
        i = index;
    }
});

if (i !== null && i + 1 < array.length) { 
    array[i].state = null;
    array[i+1].state = 'active';
}