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});
控制台日志(组)代码>比我的简单,比我的简单,很好