首页 > 解决方案 > 将具有多个索引的项目分组到子数组中

问题描述

尝试创建一个函数,将数组中的重复项分组到子数组中,并将字符串(应该有)分组到另一个子数组中。

我尝试使用 findIndex 方法定义 i,然后使用 reduce 对其进行迭代并推入 []

let roughArray = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];

function sortArray() {
    roughArray.map(num => {
        if (num[i] > 1) {
            roughArray.reduce((acc, num) => {
                return acc.concat(num)
            }, [])
        }
    })

sortArray()

我也试过:


const cleanArray = roughArray.reduce((acc, num) => {
    let i = acc.findIndex(num);
    if (i) {
        return acc.concat(num);
    }
}, [])
cleanArray();

我希望只有数字

 [[1,1,1,1],[2,2,2], 4,5,10,[20,20], 391, 392,591]

在某些包含字符串的情况下:

 [[1,2], ["2", "3"]]

标签: javascript

解决方案


您可以为各种类型的分组声明一些回调,并通过检查数组来获取所需的类型,并为分组值获取一个对象。

function sortOf(array) {
    const
        mixed = (r, v) => {
            var key = typeof v;
            r[key] = r[key] || [];
            r[key].push(v);
            return r;
        },
        numbers = (r, v) => {
            if (v in r) r[v] = [].concat(r[v], v);
            else r[v] = v;
            return r;
        };

    return Object.values(array.reduce(array.some(v => typeof v === 'string')
            ? mixed
            : numbers,
        Object.create(null)
    ));
}

console.log(sortOf([1, '1', '2', 3]));
console.log(sortOf([5, 2, 3, 3, 4, 5, 5, 1]));
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读