【问题标题】:Randomly Select number of dictionary entries that are within categories?随机选择类别内的字典条目数?
【发布时间】:2022-01-21 12:35:30
【问题描述】:

所以我设法生成了一个“记分牌”字典:

{
Player1: '10 1st',
Player2: '10 1st',
Player3: '10 1st',
Player4: '10 1st',
Player5: '10 1st',
Player6: '8 2nd',
Player7: '8 2nd',
Player8: '8 2nd',
Player9: '8 2nd',
Player10: '5 3rd',
Player11: '5 3rd',
Player12: '5 3rd'
}

但现在我不知道如何检查键字符串中的第 1/2/3 个,然后从每个“类别(第 1、第 2、第 3)”中随机选择一定数量的条目以输出新字典,例如:

如果我想随机选择 3 个1st、2 个2nd3rd 条目,新字典将为

{
Player2: '10 1st',
Player4: '10 1st',
Player5: '10 1st',
Player6: '8 2nd',
Player9: '8 2nd',
Player11: '5 3rd',
Player12: '5 3rd'
}

感谢阅读..

【问题讨论】:

    标签: javascript node.js dictionary


    【解决方案1】:

    也许将对象转换为条目的随机数组,然后使用 <Array>.filter 过滤出每种类型的单独数组,然后在每个数组上使用 <Array>.slice 以从中获取 x 数量的条目,然后使用重构对象更新的条目:

    使用numFirst = 3, numSecond = 2, numThird = 2的示例:

    const data = {
    Player1: '10 1st',
    Player2: '10 1st',
    Player3: '10 1st',
    Player4: '10 1st',
    Player5: '10 1st',
    Player6: '8 2nd',
    Player7: '8 2nd',
    Player8: '8 2nd',
    Player9: '8 2nd',
    Player10: '5 3rd',
    Player11: '5 3rd',
    Player12: '5 3rd'
    }
    
    let numFirst = 3;
    let numSecond = 2;
    let numThird = 2;
    
    const entries = Object.entries(data).sort(() => .5 - Math.random());
    const first = entries.filter(a => a[1].endsWith('1st')).slice(0, numFirst);
    const second = entries.filter(a => a[1].endsWith('2nd')).slice(0, numSecond);
    const third = entries.filter(a => a[1].endsWith('3rd')).slice(0, numThird);
    
    const filteredData = Object.fromEntries([...first, ...second, ...third]);
    console.log(filteredData);

    【讨论】:

    • 得到了预期的输出tysm!
    猜你喜欢
    • 2020-04-04
    • 2017-03-30
    • 1970-01-01
    • 2010-11-04
    • 2020-12-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多