在一个数组中,满足12个数的要求后,替换最后的数值(从左到右),满足要求后,将最后一项'1'后的所有元素替换为2.并且还建议,如果有更小的元素,则替换为2。
var arr = [1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0];
var count = arr.reduce((t, i)=> {return t+i;}, 0);
if(count === 12){
var startIndexToBeReplaced = arr.lastIndexOf(1) + 1;
var arr = arr.map((element, index) => index >= startIndexToBeReplaced ? 2 : element);
}
console.log(arr);
result = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 2]。 如果原来的数组是[1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,2,2],那么结果应该是[1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,2,2],我想知道是否可以用ecmascript来简化。
const arr = [1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0];
const resp = arr.map((s => e => s >= 12 ? 2 : (s+=e, e))(0));
console.log(resp);
就在列表中遍历一次,如果索引大于11,就替换该元素(使用 forEach
所以你可以在原地修改数组)。)
const arr = [1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0];
arr.forEach((el, i) => {
if (i > 11) arr[i] = 2;
});
console.log(arr);
为什么不直接使用map?
var arr = [1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0];
arr = arr.map((element, index) => index >= 12 ? 2 : element);