为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript | 如何从索引x开始每n个元素向数组添加一个元素?

Javascript | 如何从索引x开始每n个元素向数组添加一个元素?

梵蒂冈之花 2021-05-04 13:49:48
说我有一个数组:var cars = ["Saab", "Volvo", "BMW", "Audi", "Nissan", "Ford"];我想"Triumph"从索引2开始每2个元素添加另一个元素,给我这个cars["Saab", "Volvo", "Triumph", "BMW", "Audi", "Triumph", "Nissan", "Ford", "Triumph"];我已经试过了:for (let [index, val] of cars.entries()) {    if (index % 2 == 0) {        cars.splice(index, 0, "")    }}但是它每隔一个元素就添加一个新元素,而不是每隔2个元素,并且我不确定如何使它从特定索引开始[ '', 'Saab', '', 'Volvo', '', 'BMW', '', 'Audi', '', 'Nissan', '', 'Ford']
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我建议您使用反向迭代,这样您就不会修改要迭代的同一数组,因为这会改变索引。


另外,您可能想实现一个简单的边缘情况,以确定是否需要在该字符串的末尾添加一个字符串。这可以通过查看数组本身是否可以被要跳过的项目数整除来完成。


const cars = ["Saab", "Volvo", "BMW", "Audi", "Nissan", "Ford"];


const insertAfterN = (arr, n, str) => {

  let newArray = [...arr];

  const addToEnd = newArray.length % n === 0;


  for (let i = newArray.length - 1; i >= 0; i--)

    if (i % 2 == 0 && i !== 0) newArray.splice(i, 0, str)


  if (addToEnd) newArray.push(str);

  return newArray;

}


//Insert <"Triumph"> into the <cars> array after every <2> items

const result = insertAfterN(cars, 2, "Triumph");

console.log( result );

如果您想更简洁一些,可以使用reduce():


const cars = ["Saab", "Volvo", "BMW", "Audi", "Nissan", "Ford"];


const insertAfterN = (arr, n, str) => {

  const addToEnd = arr.length % n === 0;

  const result = arr.reduce((a,i,idx) => { idx && !(idx%n) ? a.push(str,i) : a.push(i); return a; }, []);

  if (addToEnd) result.push(str);

  return result;

}


//Insert <"Triumph"> into the <cars> array after every <2> items

const result = insertAfterN(cars, 2, "Triumph");

console.log( result );


查看完整回答
反对 回复 2021-05-20
  • 1 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信