JS迭代一个数组并在执行时更改其他数组

时间:2015-04-03 10:01:59

标签: javascript arrays

我想问一下,有可能迭代一个数组并在执行时更改其他数组。我问这个是因为我有这个功能:

function revealTriangles(arr){
    var result = arr
    for ( var i=0;i<arr.length;i++){
        for ( var j=1; j<=arr[i].length-1;j++){
            if(arr[i+1]!==undefined){
                if (arr[i][j]==arr[i+1][j]&&arr[i][j]==arr[i+1][j+1]&&arr[i][j]==arr[i+1][j-1]){
                  result[i]=arr[i].replace(arr[i][j],'*');
                    result[i+1]=arr[i+1].replace(arr[i+1][j+1],'*').replace(arr[i+1][j-1],'*').replace(arr[i+1][j],'*');
                }
            }
        }
    }
    for (i=0;i<result.length;i++) {
        console.log(result[i]);
    }
}

我想这样做,因为我想匹配一行中的一个字符,并删除下一行相同索引上的相同字符,如果它们与字符相同,则删除-1和+1索引。例如,arr [0] [5]是'a'。我想做这个和 arr [1] [4],arr [1] [5],arr [1] [6] all'*'; 当我只使用一个数组时,我得到的问题是我改变前两行然后当我移动到第二行并想要更改第2行和第3行时,我已经更改了第2行中的元素并且我无法将其与元素匹配第3行因为它已经不同了。

2 个答案:

答案 0 :(得分:0)

无论是否用*覆盖它,都可以在全局变量中存储未来的迭代值。然后,您可以访问变量,而不是之前可能覆盖的值。

对于在每次迭代期间可以覆盖的多个变量,显然需要将它们存储在多个变量中。

要清楚,您只需要在给定时间存储您正在访问的可能已被覆盖的时间。

答案 1 :(得分:0)

您可以将Array.forEach与额外thisArg一起使用(请参阅MDN)。例如:

&#13;
&#13;
var arr = [1,2,3,4,5,6];
var otherArr = [10,9,8,7,6,5,4];
var resultArr = arr.slice(); // *copy* of arr
var result = document.querySelector('#result');

result.innerHTML = 'resultArr before: '+ resultArr;

arr.forEach(
  function (el, i) { 
    if (i < this.length) {
      var addedVals = this[i] + el;
      result.innerHTML += '<br>action within forEach: ' + 
                          [this[i], el].join(' + ') + 
                          ' = ' + addedVals;
      resultArr[i] = addedVals;
    } 
  }, otherArr // <= [thisArg]
);

result.innerHTML += '<br>resultArr after: ' + resultArr;
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;