JS迭代一个数组,同时更改另一个数组
JS Iterate one array and change other while doing it
我想问是否可以在迭代一个数组的同时更改另一个数组。我问这个是因为我有这个函数:
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]所有'*';当我只使用一个数组时,我会遇到这样的问题,即我更改了前两行,然后当我移动到第二行并想更改第2行和第3行时,我已经更改了第2行中的元素,并且我无法将其与第3行中的元素匹配,因为它已经不同了。
无论是否用*
覆盖,都可以在全局变量中存储未来的迭代值。然后,您可以访问变量,而不是以前可能覆盖的值。
对于在每次迭代过程中可以覆盖的多个变量,显然有必要将它们存储在多个变量中。
要明确的是,您只需要在给定的时间存储,即您正在访问的可能已被覆盖的内容。
您可以将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>
相关文章:
- JavaScript数组包含一个值
- 使用事件更改数组的一个元素
- 从 javascript 数组创建一个 Jquery 数组
- 使用javascript匹配字符串中数组的一个元素
- Angular2从数组创建一个列表
- 在Javascript数组或一个对象中存储多个数据所需的Tweak
- 你能给被劫持的JavaScript数组添加一个函数吗
- 从带有循环的数组中一个接一个地在画布上绘制形状
- 将图像数组从一个窗口传递到另一个窗口,并在javascript的新窗口中显示图像
- 使用拆分字符串的数组创建一个对象
- 多维数组 - 创建一个表
- 将数组从一个函数传递到另一个函数
- 如何将复选框值的数组从一个JSP页面传递到另一个页面
- 使用Knockout.Js将数组绑定到表,并将数组的一个项绑定到另一个元素
- 需要访问数组从一个js到另一个
- 我如何发送数据像数组从一个html文件到另一个html页面
- 从另一个对象和要保存的键数组生成一个对象的最简洁的方法
- 用另一个js数组填充一个javascript数组
- 将对象数组从一个函数传递到另一个函数
- 根据另一个值数组过滤一个对象数组,返回一个空列表