Javascript 在数组上迭代并以某个值替换

Javascript 在数组上迭代并以某个值替换,javascript,arrays,for-loop,splice,Javascript,Arrays,For Loop,Splice,我对我的代码的可行性有一个问题。我相信有一种更好、更有效的方法来编写我编写的函数 这是功能: let i; for (i = 0; i < ns.length; i++) { if (ns[i] > 1) { ns[i] = 3; const place = ns[i]; ns.splice(place + 2, 1, 4); ns.splice(place, 1, 2); ns.splice(place - 1, 1, 1); } }

我对我的代码的可行性有一个问题。我相信有一种更好、更有效的方法来编写我编写的函数

这是功能

let i;
for (i = 0; i < ns.length; i++) {
  if (ns[i] > 1) {
    ns[i] = 3;
    const place = ns[i];
    ns.splice(place + 2, 1, 4);
    ns.splice(place, 1, 2);
    ns.splice(place - 1, 1, 1);
  }
}
结果数组:

ns = [1 , 1 , 1 , 2 , 3 , 4]
   isSibling() {
    const siblings = this.props.data.map(item => (
      item.progress
    ));
    let i;
    const place = '3';
    for (i = 0; i < siblings.length; i++) {
      if (siblings[i] === '2') {
        const num = i;
        siblings[i] = place;
        this.update(siblings, i - 1, '2');
        this.update(siblings, i + 1, '4');
        return siblings;
      }
    }
    return siblings;
   }
信不信由你,但这会符合我的需要。但是,有没有更好的方法比仅仅把三倍相加更好呢?如果初始数组的数字2位于末尾或开头,它还会扩展我的数组。我知道我可以用另一个条件来包装它,但这对我来说太笨拙了


提前谢谢

关于

您可以用删除单个值并在索引处用简单的赋值添加单个值来代替拼接

为了防止在非给定索引处更新值,可以使用一个函数来检查所需索引并仅更新给定索引

函数更新(数组、索引、值){
如果(索引>=0&&index1){
ns[i]=地点;
更新(ns,地点-1,1);
更新(ns,地点,2);
更新(ns,地点+2,4);
}
}

控制台日志(ns)所以在尼娜·斯科尔斯和一位朋友的帮助下,我得到了正确的答案:

初始数组:

["1", "1", "1", "1", "1", "2", "0", "0"]
["1", "1", "1", "1", "2", "3", "4", "0"]
所需阵列:

["1", "1", "1", "1", "1", "2", "0", "0"]
["1", "1", "1", "1", "2", "3", "4", "0"]
功能:

ns = [1 , 1 , 1 , 2 , 3 , 4]
   isSibling() {
    const siblings = this.props.data.map(item => (
      item.progress
    ));
    let i;
    const place = '3';
    for (i = 0; i < siblings.length; i++) {
      if (siblings[i] === '2') {
        const num = i;
        siblings[i] = place;
        this.update(siblings, i - 1, '2');
        this.update(siblings, i + 1, '4');
        return siblings;
      }
    }
    return siblings;
   }
issiling(){
const sides=this.props.data.map(项=>(
项目1.进展
));
让我;
康斯特广场='3';
对于(i=0;i<0.length;i++){
如果(同级[i]=='2'){
常数num=i;
兄弟姐妹[i]=地点;
更新(兄弟姐妹,i-1,'2');
更新(同级,i+1,'4');
返回兄弟姐妹;
}
}
返回兄弟姐妹;
}
更新功能:
要确保阵列不会加长或缩短,请执行以下操作:

  update(array, index, value) {
    if (index >= 0 && index < array.length) {
      array[index] = value;
    }
  }
更新(数组、索引、值){
如果(索引>=0&&index

谢谢你的帮助!:谢谢你。似乎是窒息的解决方案。如果我添加这一行,那么数组仍然会扩展
ns[place+3]=5。你有没有办法在没有条件的情况下避免这种情况?在这种情况下会发生什么?你想保持数组的长度吗?旧的算法给出正确的结果吗?可能问题在于
place
的固定索引
3
,但您将此值分配给值大于1的索引,并将此值用于以后更新三个值(如果是外层空间,则不需要)。不知何故,我仍然有一个问题,我不知道发生了什么。有了这个初始数组:
[“1”、“1”、“1”、“1”、“1”、“2”、“0”、“0”]
我得到了这个结果:
[“1”、“1”、“1、2”、“1”、“4”、“0”、“0”]
我留下了数字来显示它替换的位置,但我不明白为什么它不替换3,为什么它在错误的位置替换。我认为这与数组/字符串/数字有关。。。但是如果我把它全部用字符串格式,它仍然不能让我们工作。