Javascript 如何将同一项分组到数组中?
我的数据如下Javascript 如何将同一项分组到数组中?,javascript,ecmascript-6,Javascript,Ecmascript 6,我的数据如下 [1,1,1,2,2,1,1,1,2,2,1,1,1,1,2,1,2,2] 如何将此数组设置为“喜欢” [[1,1,1], [2,2], [1,1,1], [2,2], [1,1,1,1,], [2], [1], [2,2]] 谢谢这应该能奏效。我添加了一个选项来选择自定义比较器函数,但默认值是严格相等 在有人说我应该用之前。forEach,这是用一个普通的旧的。。。由于性能原因,循环 function groupSubsequent(input, comparator = (
[1,1,1,2,2,1,1,1,2,2,1,1,1,1,2,1,2,2]
如何将此数组设置为“喜欢”
[[1,1,1], [2,2], [1,1,1], [2,2], [1,1,1,1,], [2], [1], [2,2]]
谢谢这应该能奏效。我添加了一个选项来选择自定义比较器函数,但默认值是严格相等 在有人说我应该用之前。forEach,这是用一个普通的旧的。。。由于性能原因,循环
function groupSubsequent(input, comparator = (a, b) => a === b) {
const output = [];
let currentGroup = null;
for (let i = 0; i < input.length; i++) {
const item = input[i];
if (currentGroup === null || !comparator(currentGroup[currentGroup.length - 1], item)) {
currentGroup = [];
output.push(currentGroup);
}
currentGroup.push(item);
}
return output;
}
console.log(groupSubsequent([1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2]));
这应该能奏效。我添加了一个选项来选择自定义比较器函数,但默认值是严格相等 在有人说我应该用之前。forEach,这是用一个普通的旧的。。。由于性能原因,循环
function groupSubsequent(input, comparator = (a, b) => a === b) {
const output = [];
let currentGroup = null;
for (let i = 0; i < input.length; i++) {
const item = input[i];
if (currentGroup === null || !comparator(currentGroup[currentGroup.length - 1], item)) {
currentGroup = [];
output.push(currentGroup);
}
currentGroup.push(item);
}
return output;
}
console.log(groupSubsequent([1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2]));
您可以使用reduce方法执行此操作,并检查前一个元素i-1是否等于当前元素
常量数据=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]
const result=data.reducer,e,i,a=>{
设last=r[r.长度-1]
if!last | | e!==a[i-1]r.push[e]
最后一个是普什
返回r
}, []
logresult您可以使用reduce方法执行此操作,并检查前面的元素i-1是否等于当前元素
常量数据=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]
const result=data.reducer,e,i,a=>{
设last=r[r.长度-1]
if!last | | e!==a[i-1]r.push[e]
最后一个是普什
返回r
}, []
如果当前元素与最后一个元素不匹配,则可以执行简单的reduce并将新数组推送到累加器 常量数据=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]; const res=data.reduceac,cur=>{ const last=acc[acc.length-1]| |[] 如果cur!==last[last.length-1]{ acc.push[当前] }否则{ acc[acc.length-1]。pushcur } 返回acc; }, []
logres如果当前元素与最后一个元素不匹配,您可以执行简单的reduce并将新数组推送到累加器 常量数据=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]; const res=data.reduceac,cur=>{ const last=acc[acc.length-1]| |[] 如果cur!==last[last.length-1]{ acc.push[当前] }否则{ acc[acc.length-1]。pushcur } 返回acc; }, []
console.logres您可以使用array reduce执行此操作: 常量arr=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]; const result=arr.reducecarrier,item=>{ const lastarrayincharrier=carrier[carrier.length-1];//获取最后一个子数组 如果数组的lastArrayInCarrier实例&&lastArrayInCarrier[0]==项{//如果最后一个子数组包含与当前迭代相同的数字,请将其追加 lastArrayInCarrier.pushitem; }else{//else使用新编号创建新子数组 承运人.推送[项目] } 返回载体; }, []; console.logresult; 输出: [ [ 1, 1, 1 ], [ 2, 2 ], [ 1, 1, 1 ], [ 2, 2 ], [ 1, 1, 1, 1 ], [ 2 ], [ 1 ], [ 2, 2 ] ]
您可以使用array reduce执行此操作: 常量arr=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,2,1,2]; const result=arr.reducecarrier,item=>{ const lastarrayincharrier=carrier[carrier.length-1];//获取最后一个子数组 如果数组的lastArrayInCarrier实例&&lastArrayInCarrier[0]==项{//如果最后一个子数组包含与当前迭代相同的数字,请将其追加 lastArrayInCarrier.pushitem; }else{//else使用新编号创建新子数组 承运人.推送[项目] } 返回载体; }, []; console.logresult; 输出: [ [ 1, 1, 1 ], [ 2, 2 ], [ 1, 1, 1 ], [ 2, 2 ], [ 1, 1, 1, 1 ], [ 2 ], [ 1 ], [ 2, 2 ] ] var x=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,2,1,2]; var arr=[] var temp=[] 对于i=0;我 var x=[1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,2,1,2]; var arr=[] var temp=[] 对于i=0;我