Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 将数组缩减为组_Javascript - Fatal编程技术网

Javascript 将数组缩减为组

Javascript 将数组缩减为组,javascript,Javascript,我有这个阵列: const vals = ['blue', 'blue', 'green', 'blue', 'yellow', 'yellow', 'green'] 我想把它简化为: ['blueblue', 'green', 'blue', 'yellowyellow', 'green'] 其中,如果值相同,则表示值相同。一旦值更改,它将再次启动 尝试使用reduce,但不确定如何使其工作,因为acc需要是字符串和数组,具体取决于值是否相同 let lastType = vals[0]

我有这个阵列:

const vals = ['blue', 'blue', 'green', 'blue', 'yellow', 'yellow', 'green']
我想把它简化为:

['blueblue', 'green', 'blue', 'yellowyellow', 'green']
其中,如果值相同,则表示值相同。一旦值更改,它将再次启动

尝试使用reduce,但不确定如何使其工作,因为
acc
需要是字符串和数组,具体取决于值是否相同

let lastType = vals[0]
const groups = vals.reduce((acc, value) => {
  if (lastType === value) {
    acc += value // string
  }

  lastType = value
  return acc.push(value)
}, [])

您需要在实际索引前面的索引处检查元素,并向累加器添加一个新字符串

const
值=[“蓝色”、“蓝色”、“绿色”、“蓝色”、“黄色”、“黄色”、“绿色”],
结果=值。减少((累加器、值、索引、数组)=>{
if(value==数组[index-1])累加器[acculator.length-1]+=值;
else累加器。推(值);
回流蓄能器;
}, []);

控制台日志(结果)您需要检查实际索引前面的索引处的元素,并向累加器添加一个新字符串

const
值=[“蓝色”、“蓝色”、“绿色”、“蓝色”、“黄色”、“黄色”、“绿色”],
结果=值。减少((累加器、值、索引、数组)=>{
if(value==数组[index-1])累加器[acculator.length-1]+=值;
else累加器。推(值);
回流蓄能器;
}, []);

控制台日志(结果)如果类型是新的,则将空字符串推送到累加器。请记住,
.push
返回数组的新长度,因此不要在函数底部返回它,而是返回整个累加器:

const vals=['blue','blue','green','blue','yellow','yellow','green']
让最后一种类型;
常量组=VAL.REDUCT((acc,值)=>{
if(lastType!==值){
acc.push(“”);
lastType=值;
}
acc[acc.长度-1]+=值;
返回acc;
}, [])

控制台日志(组)如果类型是新的,则将空字符串推送到累加器。请记住,
.push
返回数组的新长度,因此不要在函数底部返回它,而是返回整个累加器:

const vals=['blue','blue','green','blue','yellow','yellow','green']
让最后一种类型;
常量组=VAL.REDUCT((acc,值)=>{
if(lastType!==值){
acc.push(“”);
lastType=值;
}
acc[acc.长度-1]+=值;
返回acc;
}, [])

控制台日志(组)
最终结果是一个数组,因此这就是
acc
应该是的

不要将
value
附加到
acc
,而是将其附加到数组的最后一个元素:

const vals=['blue','blue','green','blue','yellow','yellow','green']
设lastType=null;
常量组=VAL.REDUCT((acc,值)=>{
if(lastType==值){
acc[acc.长度-1]+=值;
}否则{
lastType=值
附件推送(值)
}
返回acc;
}, [])

控制台日志(组)
最终结果是一个数组,因此这就是
acc
应该是的

不要将
value
附加到
acc
,而是将其附加到数组的最后一个元素:

const vals=['blue','blue','green','blue','yellow','yellow','green']
设lastType=null;
常量组=VAL.REDUCT((acc,值)=>{
if(lastType==值){
acc[acc.长度-1]+=值;
}否则{
lastType=值
附件推送(值)
}
返回acc;
}, [])

控制台日志(组)您需要跟踪更多信息。这样做的基本方法是使用一个对象来保存状态

const vals=['blue','blue','green','blue','yellow','yellow','green']
常量组=VAL.REDUCT((acc、值、索引、数组)=>{
//是一样的吗,复制一下
if(acc.lastType==值){
acc.电流+=值;
}否则{
//我们有以前的值吗?将其添加到数组中
如果(根据最后类型){
acc.结果推送(acc.电流);
}
//设置当前类型
acc.电流=值;
acc.lastType=值;
}
//如果我们在最后,将我们拥有的添加到数组中
if(索引+1==array.length){
acc.结果推送(acc.电流);
}
返回acc;
},{result:[],当前:“”,lastType:null});

控制台日志(组)您需要跟踪更多信息。这样做的基本方法是使用一个对象来保存状态

const vals=['blue','blue','green','blue','yellow','yellow','green']
常量组=VAL.REDUCT((acc、值、索引、数组)=>{
//是一样的吗,复制一下
if(acc.lastType==值){
acc.电流+=值;
}否则{
//我们有以前的值吗?将其添加到数组中
如果(根据最后类型){
acc.结果推送(acc.电流);
}
//设置当前类型
acc.电流=值;
acc.lastType=值;
}
//如果我们在最后,将我们拥有的添加到数组中
if(索引+1==array.length){
acc.结果推送(acc.电流);
}
返回acc;
},{result:[],当前:“”,lastType:null});

控制台日志(组)比我的简单,比我的简单,很好