javascript - 将具有多个索引的项目分组到子数组中
问题描述
尝试创建一个函数,将数组中的重复项分组到子数组中,并将字符串(应该有)分组到另一个子数组中。
我尝试使用 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"]]
解决方案
您可以为各种类型的分组声明一些回调,并通过检查数组来获取所需的类型,并为分组值获取一个对象。
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; }
推荐阅读
- mapping - 使用来自函数的值生成新序列
- batch-file - for /f 循环连接参数
- python - 如何从两个线程安全地写入同一个文件?
- angular - 更新时输入类型文件中未显示值
- python - 清理 CBV
- android - AdMob 在运行时出现间歇性 java.lang.NoClassDefFoundError
- salt-stack - salt 在后台执行哪些命令来实现所需的 minion 状态?
- java - 为什么我从数组 B 得到 0,但它在数组 A 上工作
- android - 是否可以通过 USB 集线器在两部安卓手机之间进行通信?
- d3.js - 更新 D3.js 树形图的数据