遍历Array并替换为特定值

时间:2018-08-29 08:41:49

标签: 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);
  }
}

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

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

结果数组:

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

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


提前谢谢!
问候

2 个答案:

答案 0 :(得分:1)

您可以通过删除单个值并通过在索引处进行简单的添加来添加单个值来代替拼接。

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

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

答案 1 :(得分: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