迭代数组并替换为某个值

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

我对我的代码的可行性有疑问。我确信有一种更好,更有效的方式来编写我写的函数。

这是功能:

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

初始数组(此数组的长度最多为20项):

ns = [1 , 1 , 1 , 1 , 2 , 0]

结果数组:

ns = [1 , 1 , 1 , 2 , 3 , 4]

信不信由你,但这符合我的需要。但是,有没有比只加三次拼接更好的方法?如果初始数组的第二个数字在结尾或开始,它也会扩展我的数组。我知道我可以将它包装在另一个条件中,但这对我来说似乎很笨拙。

提前致谢! 问候

javascript arrays for-loop splice
2个回答
1
投票

您可以使用删除单个值替换拼接,并在索引处添加单个值并使用简单的assingment。

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

function update(array, index, value) {
    if (index >= 0 && index < array.length) {
        array[index] = value;
    }
}
var ns = [1, 1, 1, 1, 2, 0],
    length = ns.length,
    i,
    place = 3;
    
for (i = 0; i < length; i++) {
    if (ns[i] > 1) {
        ns[i] = place;
        update(ns, place - 1, 1);
        update(ns, place, 2);
        update(ns, place + 2, 4);
    }
}

console.log(ns);

0
投票

所以在Nina Scholz和朋友的帮助下,我得到了正确答案:

初始数组:

["1", "1", "1", "1", "1", "2", "0", "0"]

期望的阵列:

["1", "1", "1", "1", "2", "3", "4", "0"]

功能:

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

更新功能: 确保阵列不被延长或缩短:

  update(array, index, value) {
    if (index >= 0 && index < array.length) {
      array[index] = value;
    }
  }

谢谢您的帮助! :d

© www.soinside.com 2019 - 2024. All rights reserved.