将数据从数组排列到对象

时间:2017-07-29 00:42:10

标签: javascript node.js

我有一组数据["Bet:W:2:23:, "Bet:P:6:2", "Bet:W:5:3"]

[0]在#2上赢23美元 [1]在#6上下注2美元等等

如何安排数据以便我可以将赌注添加到池中,然后在支持获胜者的所有人之间划分池?

我试过迭代并分离':'。这意味着我可以创建投注池,但这意味着我失去了赌注和他们下注的马之间的联系。我假设为了维持这种联系,我需要创建一个对象,但我还没有弄清楚如何做到这一点。

3 个答案:

答案 0 :(得分:2)

您正在寻找map

const bets = ["Bet:W:2:23", "Bet:P:6:2", "Bet:W:5:3"].map(b => {
    const bet = b.split(':');
    return {
        type: bet[1],
        number: bet[2],
        amount: parseInt(bet[3], 10)
    };
});

一旦您的数据处于易于使用的形式,您就可以执行其他有用的操作,例如使用reduce查找池数量:

const pool = bets.reduce((sum, bet) => sum + bet.amount, 0);

答案 1 :(得分:0)

最简单的方法是使用json定义对象,并创建一个对象数组。通常您会遵循以下格式:

{{1}}

然后对于每次下注,你将使用key:每次下注的值对构建这样的东西,将它推送到数组(这是你可能试图在你的例子中实现的json表示法)

{{1}}

使用该格式,您应该能够使用forEach()或.each方法访问您的betPool,以使用其密钥正确解析数据。

如果您需要进一步详细说明,请与我们联系。

答案 2 :(得分:0)

听起来您希望您的数据做两件事:跟踪总投注池,并能够从任何特定的马(如支付时间)检索所有投注(有更好的投注)。您可以自定义一个对象来执行此操作。

var raceObj = {pool: 0};

然后迭代为每匹马添加一个属性。例如,从数组['Bet:W:5:120','Bet:P:5:25','Bet:W:5:40','Bet:W:8:15']我们喜欢对象:

{
    pool: 200,
    '5': {
        W: [120, 40],
        P: [25]
    },
    '8': {
        W: [15],
        P: []
    }
}

您可以通过迭代数组来构建此对象:

for (var i = 0; i < arr.length; i++) {
    var result = /^Bet:(W|P):([0-9]+):(.+)$/.exec(arr[i]);
    var type = result[1];
    var horse = result[2];
    var bet = parseInt(result[3]);

    raceObj.pool += bet;
    if (!raceObj.hasOwnProperty(horse)) {
        raceObj[horse] = {W: [], P: []};
    }
    raceObj[horse][type].push(bet);
}

我可能没有完全预料到您的需求,但我觉得如果您只是这些计算,那么构建一个真正定制的对象是javascript中的一个很好的选择。