2017-07-29 42 views
1

我有一个数组数组,其数组是["Bet:W:2:23:, "Bet:P:6:2", "Bet:W:5:3"]将数组中的数据排列到对象中

[0]下注$ 23#2赢 [1]下注$ 2#6放置等

我如何安排数据,以便我可以添加投注池,然后划分池谁支持赢家?

我已经尝试迭代和分离':'。这意味着我可以创建投注池,但这意味着我失去了投注和他们下注的马匹之间的联系。我假设为了保持这种联系,我需要创建一个对象,但我一直无法解决如何做到这一点。

+1

如何将结果看? – hurricane

+1

这个问题太广泛了。从比如'{bet:'win',id:'2',value:23}'等属性创建一个对象开始,然后处理你想要的任何分配算法。 – RobG

+0

这听起来像你需要一个对象像每次下注:[{赌注:23, 谁:2, 结果:赢}, {投注:2, 谁:6, 结果:将 }] –

回答

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); 
0

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

var betPool = []; //defines empty object array for the betting pool 

然后为每个敢打赌,你会使用键构造是这样的:值对每次下注,推它的阵列(这是你可能尝试JSON符号使用该格式在你的例子来实现)

{ amount: 'this.value', horse: 'this.number', condition:'this.condition' } 

,你应该能够使用foreach()或。每个方法适当地使用它的关键分析数据访问您的betPool。

让我知道你是否需要进一步阐述。

0

这听起来像是你希望你的数据做2件事:跟踪总的投注池,并能够从任何特定的马(如支付时间)检索所有投注(与更高)。你可以自定义一个对象来做到这一点。

var raceObj = {pool: 0}; 

然后迭代通过为每匹马添加属性。例如,从阵列['Bet:W:5:120','Bet:P:5:25','Bet:W:5:40','Bet:W:8:15']我们想的对象:

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); 
} 

我可能没有准确地预见你的需求:

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

您可以通过遍历数组像这样在建立这个对象,但我觉得如果你只是一次这些计算,那么构建一个真正定制的对象是一个很好的选择在JavaScript中。