2016-02-12 46 views
0

我有一个Ajax调用,其中即时通讯用户选择的颜色,并尝试将结果堆叠在一个数组中。我试图堆叠颜色,然后是几个月。无法将数据拆分成正确的数组

这里是我的代码至今:

var yr = element.created_date.slice(0, 4); 
    var month = parseInt(element.created_date.slice(5,7)); 
    var color = element.colorvalue.split(","); 

    if (counts[color] === undefined) { 
    counts[color] = {}; 
    } 
    if (counts[color][yr] === undefined) { 
    counts[color][yr] = {}; 
    } 

    current_value = counts[color][yr][month]; 
    if (current_value === undefined) { 
    // Doesnt exist yet, so add it 
    counts[color][yr][month] = 1; 
    } else { 
    // Exists, so increment by 1 
    counts[color][yr][month] = current_value + 1; 
    } 
}); 

这是输出IM从此获得:

{"red, blue, yellow":{"2015":{"8":1}},"blue, red":{"2015":{"8":1}},"red":{"2015":{"7":1,"8":2}},"yellow":{"2015":{"10":1}},"blue":{"2015":{"9":1}},"yellow, red, blue":{"2015":{"7":1}}} 

我使用.split( “”),认为它会理解把颜色分成自己的堆栈,但事实并非如此。这就是我期待的回归。

{"red":{"2015":{"1":23,"2":19,"3":32,"4":18,"5":12,"6":22,"7":23,"8":21,"9":16,"10":23,"11":22,"12":14},"2016":{"1":19,"2":9}},"yellow":{"2015":{"9":1,"12":1},"2016":{"1":16,"2":3}},"blue":{"2015":{"11":1,"12":2},"2016":{"1":5,"2":1}}} 

这里是一个jsfiddle来展示我试图完成什么样的例子。有人会知道我错过了什么吗? https://jsfiddle.net/awo5aaqb/29/

+0

哪来的的jsfiddle? – roullie

+0

我在这里很糟糕,它是https://jsfiddle.net/awo5aaqb/29/ –

+0

.split()返回一个数组,你应该遍历该数组以获得每种颜色。 – ijball

回答

1

当你分裂颜色,你最终得到一个数组,你想迭代每个单独的颜色。否则,由于您将该数组用作对象的属性,因此它将被序列化为一个字符串(基本上撤消您刚执行的分割)。 https://jsfiddle.net/awo5aaqb/32/

var colors = element.colorvalue.split(","); 

colors.forEach(function (color) { 
    color = color.trim(); // remove any whitespace from the split 
    // now you can do stuff 
}) 

而且,让你

{ 
    "red": { 
     "2015": { 
      "7": 2, 
      "8": 2, 
      "9": 2 
     } 
    }, 
    "blue": { 
     "2015": { 
      "7": 2, 
      "9": 2 
     } 
    }, 
    "yellow": { 
     "2015": { 
      "7": 1, 
      "8": 1, 
      "9": 1 
     } 
    } 
}