2015-04-03 59 views
0

我想问的是可以迭代一个数组并更改其他数据。我问这个,因为我有这个功能:JS迭代一个数组并更改其他数据

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如果它们与char相同,则为+1索引。例如arr [0] [5]是'a'。我想制作这个和所有'*'; arr [1] [4],arr [1] [5],arr [1] [6] 当我只使用一个数组时,我得到的问题是,我改变了前两行,然后当我移动到第二行,并想要更改第2行和第3行时,我已经更改了第2行中的元素,我不能将它匹配到元素在第3行因为它已经不同了。

+0

如果你真的想要一个*其他*数组,你应该做'结果= []'! – Bergi 2015-04-03 10:43:03

回答

0

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

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

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

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;
<div id="result"></div>