如何将数据两次推送到对象中

时间:2014-08-18 14:30:50

标签: javascript

是否有可能将某些数据推入对象两次并得到一个结果?我有这段代码:

var t = data.datasets,

var data = {
    datasets : (function(){
        var arr = [];
        for (var i=0; i < t.length; i++) {
            arr.push({
                label: t[i].label,
                data: t[i].values
            });
            if (t[i].color === "red"){
                arr.push({
                    fillColor: "rgba(223, 34, 155, 0.48)"
                });
            } else {
                arr.push({
                    fillColor: "rgba(167, 167, 167, 0.64)"
                });
            }
        }
        return arr;
    })()
};

我需要这个:

arr.push({
    label: t[i].label,
    data: t[i].values,
    fillColor: "rgba(167, 167, 167, 0.64)" // or other
});

或者我必须在每种条件下推送这些重复值?

3 个答案:

答案 0 :(得分:2)

为什么不这样:

    for (var i=0; i < t.length; i++) {
        var temp = {
            label: t[i].label,
            data: t[i].values
        };
        if (t[i].color === "red"){
            temp.fillColor = "rgba(223, 34, 155, 0.48)";
        } else {
            temp.fillColor: = "rgba(167, 167, 167, 0.64)";
        }
        arr.push(temp);
    }

这样您就不必重复labeldata部分。

或者,如果fillColor只有两个可能的值(你可以做得更多,但它会很快变得一团糟),你可以这样做:

arr.push({
      label: t[i].label,
      data: t[i].values,
      fillColor: t[i].color === "red" ? "rgba(223, 34, 155, 0.48)" : "rgba(167, 167, 167, 0.64)"
  });

答案 1 :(得分:1)

那么,这样的事情呢?

        for (var i=0; i < t.length; i++) {
            var fillColor = t[i].color === 'red' ? 
                "rgba(223, 34, 155, 0.48)" : 
                "rgba(167, 167, 167, 0.64)";
            arr.push({
                label: t[i].label,
                data: t[i].values,
                fillColor: fillColor
            });
        }

这仍然无法回答问题raised by Pointy,但我不太了解您正在尝试做些什么,以便就此提出任何建议。

答案 2 :(得分:0)

我建议构建一个'holder'变量,然后推送一次。

伪代码,

var holder = data;
if(a)
  holder+=moredata;
else
 holder+=otherdata;

然后执行单次推送

arr.push(holder);