是否有可能将某些数据推入对象两次并得到一个结果?我有这段代码:
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
});
或者我必须在每种条件下推送这些重复值?
答案 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);
}
这样您就不必重复label
和data
部分。
或者,如果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);