我想问一下,有可能迭代一个数组并在执行时更改其他数组。我问这个是因为我有这个功能:
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行因为它已经不同了。
答案 0 :(得分:0)
无论是否用*
覆盖它,都可以在全局变量中存储未来的迭代值。然后,您可以访问变量,而不是之前可能覆盖的值。
对于在每次迭代期间可以覆盖的多个变量,显然需要将它们存储在多个变量中。
要清楚,您只需要在给定时间存储您正在访问的可能已被覆盖的时间。
答案 1 :(得分:0)
您可以将Array.forEach
与额外thisArg
一起使用(请参阅MDN)。例如:
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;