javascript或jquery 如何按照要求处理下面数组并输出

现有数组[1,1,2,2,3,3,4,4,5,5] 如何通过js 变成[1,2,3,4,5,1,2,3,4,5]

阅读 1.9k
2 个回答
[1,1,2,2,3,3,4,4,5,5]
[1,2,3,4,5,1,2,3,4,5]

你的值对照关系,转换成下标对照如下

[0,1,2,3,4,5,6,7,8,9]
[0,5,1,6,2,7,3,8,4,9]

由上面的似乎可以得出奇数偶数位递增,我们扩展到3找寻规律。

[1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
[0,5,10,1,6,11,...]

从这里我们似乎就找到了两个东西,这俩个东西是描述我们数组的。

// 独立个数
var size = new Set([1,2,3,4,5,1,2,3,4,5]).size
// 独立个数重复次数
var repeatSize = arr.length / size

然后就是规律生成了

var arr = [1,1,2,2,3,3,4,4,5,5]
var size = new Set(arr).size
var repeatSize = arr.length / size

arr.reduce((s,n,idx,arr)=>{
    s[(idx % repeatSize) * size + (idx / repeatSize)>>0] = n
    return s
},[])

image.png
扩展到其他规则下也是对的
image.png
image.png

如果数据格式比较确定,处理起来也简单:

const data = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];

const result = data
    .reduce((groups, v, i) => {
        const groupIndex = i % 2;
        const g = groups[groupIndex] = groups[groupIndex] || [];
        g.push(v);
        return groups;
    }, [])
    .reduce((one, g) => one.concat(g), []);

console.log(result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题