Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否在Array.map中操作上一项?_Javascript_Arrays - Fatal编程技术网

Javascript 是否在Array.map中操作上一项?

Javascript 是否在Array.map中操作上一项?,javascript,arrays,Javascript,Arrays,我正在使用转换数组,如果当前项与某些条件匹配,我希望更改其上一项 下面的代码似乎不起作用,没有循环我怎么做 var nums=[1,2,3,4,5]; var res=nums.map((项目、索引、数组)=>{ 如果(项目>3){ 数组[索引-1]+=1; } 退货项目; }); console.log(res);//[1,2,3,4,5],我想要[1,2,4,5,5]正在从创建的数组。map不能这样引用。相反,在forEach之外创建数组,并推送到/分配给它: var nums=[1,2

我正在使用转换数组,如果当前项与某些条件匹配,我希望更改其上一项

下面的代码似乎不起作用,没有循环我怎么做

var nums=[1,2,3,4,5];
var res=nums.map((项目、索引、数组)=>{
如果(项目>3){
数组[索引-1]+=1;
}
退货项目;
});

console.log(res);//[1,2,3,4,5],我想要[1,2,4,5,5]
正在从
创建的数组。map
不能这样引用。相反,在
forEach
之外创建数组,并推送到/分配给它:

var nums=[1,2,3,4,5];
常数newArr=[];
nums.forEach((项目、索引)=>{
如果(项目>3)newArr[索引-1]+=1;
新到货推送(项目);
});

console.log(newArr);//我希望[1,2,4,5,5]
正在从
创建的数组。map
不能这样引用。相反,在
forEach
之外创建数组,并推送到/分配给它:

var nums=[1,2,3,4,5];
常数newArr=[];
nums.forEach((项目、索引)=>{
如果(项目>3)newArr[索引-1]+=1;
新到货推送(项目);
});

console.log(newArr);//我想要[1,2,4,5,5]
你可以向前看,而不是试图向后看:

var nums = [1, 2, 3, 4, 5];

var res = nums.map((item, index, array) => {
  if (array[index + 1] > 3) {
    item += 1;
  }
  return item;
});

您可以向前看,而不是试图向后看:

var nums = [1, 2, 3, 4, 5];

var res = nums.map((item, index, array) => {
  if (array[index + 1] > 3) {
    item += 1;
  }
  return item;
});

您可以使用
array
参数查看下一个项目并相应地返回当前项目的值,而不是尝试更改上一个项目:

var nums=[1,2,3,4,5];
var res=nums.map((项目,索引,数组)=>item+(数组[index+1]>3?1:0));

console.log(res);//[1,2,4,5,5]
您可以使用
数组
参数查看下一项,并相应地返回当前项的值,而不是尝试更改上一项:

var nums=[1,2,3,4,5];
var res=nums.map((项目,索引,数组)=>item+(数组[index+1]>3?1:0));
console.log(res);//[1,2,4,5,5]
您可以使用减速器

var res=[1,2,3,4,5]
.reduce((reduced,item,i)=>{
i&(减少的[i-1]+=项目>3?1:0);
返回[…减少,项目];
}, []);
控制台日志(res)您可以使用减速器

var res=[1,2,3,4,5]
.reduce((reduced,item,i)=>{
i&(减少的[i-1]+=项目>3?1:0);
返回[…减少,项目];
}, []);

控制台日志(res)免责声明:这个答案之所以在这里,是因为我觉得每当有人问“如何在没有for循环的情况下执行X”,我觉得所有映射和reduces之间至少应该有一个递归解决方案:)

没有for循环我怎么做

如果您不太关心性能或破坏堆栈的风险,那么可以使用递归函数

下面是一个例子:

  • 将数组分解为
    第一个
    第二个
    和其余部分
  • 如果
    first
    为空,则表示计算结束并返回结果
  • 如果
    first
    不是空的,我们可以将其与
    second
    进行比较以确定其值。我们将值添加到结果并递归:
  • 再次调用函数,但现在使用
    [second,…rest]
    并传递结果
const input=[1,2,3,4,5];
const Empty=Symbol();
const incIfBt3=
([first=空,second,…rest],result=[])=>
第一个===空
? 结果
:incIfBt3(
[第二,…休息],
[…结果,第一个+(第二个>3)]
);

控制台日志(incIfBt3(输入))免责声明:这个答案之所以在这里,是因为我觉得每当有人问“如何在没有for循环的情况下执行X”,我觉得所有映射和reduces之间至少应该有一个递归解决方案:)

没有for循环我怎么做

如果您不太关心性能或破坏堆栈的风险,那么可以使用递归函数

下面是一个例子:

  • 将数组分解为
    第一个
    第二个
    和其余部分
  • 如果
    first
    为空,则表示计算结束并返回结果
  • 如果
    first
    不是空的,我们可以将其与
    second
    进行比较以确定其值。我们将值添加到结果并递归:
  • 再次调用函数,但现在使用
    [second,…rest]
    并传递结果
const input=[1,2,3,4,5];
const Empty=Symbol();
const incIfBt3=
([first=空,second,…rest],result=[])=>
第一个===空
? 结果
:incIfBt3(
[第二,…休息],
[…结果,第一个+(第二个>3)]
);

控制台日志(incIfBt3(输入))
我想补充一点,
.map()
是所谓的不合适的算法,这意味着输出数组与输入数组的引用不同。我想补充一点,
.map()
是所谓的不合适的算法,这意味着输出数组不是与输入数组相同的引用。
数组
。有一个大量的下行表决器处于空闲状态!展示你自己!有一大群投票者逍遥法外!展示你自己!双击666双击666免责声明:您的想法既酷又有趣,但我认为递归代码有时更难理解!如果你没有收到这么多好的答案,我就不会发布这个了。我对JLRishe的答案投了更高的票,因为这是我在共享/生产代码免责声明中实际使用的答案:你的想法很酷也很有趣,但我认为递归代码有时更难理解!如果你没有收到这么多好的答案,我就不会发布这个了。我对JLRishe的答案投了更高的票,因为这是我在共享/生产中实际使用的答案