javascript - 如何使用迭代器嵌套循环?
问题描述
我有以下代码:
let array = [0,1,2];
for (let i = 0; i < array.length; i++)
for (let j = i + 1; j < array.length; j++) // j starts at i+1
console.log(array[i], array[j]);
但由于重复项目,我决定将我的数组转换为地图。现在我想在地图上进行上述迭代:
let map = array.reduce(countIntoMap, new Map());
for (let [i,counti] of map.entries())
for (let [j,countj] of map.entries()) // j starts at 0
console.log(array[i], array[j]);
我怎么能开始循环i + 1
呢?
编辑:这是重要的函数,因为我想知道每个元素出现了多少次。
function countIntoMap (map, element) {
if ( ! map.has(element) )
map.set(element, 1);
else
map.set(element, map.get(element) + 1);
return map;
}
解决方案
这将创建{key, count}
对象数组,并且可以根据需要对其进行迭代
let array = [0, 1, 2, 2];
const uniq = array.reduce((acc, a) => {
let idx = acc.findIndex(b => b.key === a);
idx === -1 ? acc.push({ key: a, count: 1}) : ++acc[idx].count;
return acc;
}, []);
for (let i = 0; i < uniq.length; ++i) {
for (let j = i + 1; j < uniq.length; ++j) {
console.log(uniq[i].count, uniq[j].count);
}
}
推荐阅读
- reactjs - 在本机反应中,任务':app:bundleReleaseJsAndAssets'的构建失败
- ruby-on-rails - 如何使工厂可以使用辅助方法?(导轨,Rspec)
- java - 如何在 Android 上使用两个或多个搜索栏
- android - 如何在谷歌地图的地理围栏圈上添加标题?
- angular - 角度 7 的 PDF 编辑器
- visual-c++ - 使用 /WX 编译器选项,Visual C++ 不应该构建我的程序,但它确实
- c# - 为.NET中的列表应用补丁的正确方法是什么
- c++ - 查找存储在优先级队列中的值的有效方法
- python - 创建受密码保护的 Samba 存储池
- asp.net-core - ASP.NET Core JWT 访问令牌吊销