替换数组中符合特定要求的多个数字

问题描述 投票:0回答:2

在一个数组中,满足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来简化。

javascript arrays reduce
2个回答
1
投票

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

0
投票

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

0
投票

为什么不直接使用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);
© www.soinside.com 2019 - 2024. All rights reserved.