满足特定要求后替换数组中的多个数字

replace multiple numbers in array after meeting specific requirement

满足数组中计数 12(从左起)的要求后替换最后一个值 满足要求后,将最后一项“1”之后的所有元素替换为 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);

结果 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 2, 2]; 如果原始数组是 [1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,0,0] 那么结果应该是 [1,1, 1,1,1,0,1,1,1,1,1,0,1,0,1,2,2,2] 我正在寻找是否可以使用 ecmascript

简化它

只需遍历列表一次,如果索引大于 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);

为什么不直接使用地图?

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);

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);