我对java脚本更新鲜。我创建了一个对象和键值对。最近我需要添加另一个键(颜色),其值应来自颜色数组(color[]
)。如果对象大小大于颜色数组大小,则应从以下位置分配颜色键的值彩色数组的开头
var sumArray=[{"sum":1},{"sum":2},{"sum":3},{"sum":4},{"sum":5},{"sum":6}]
var color=["#FF0F00","#FF6600","#FF9E01"];
var combinedObj =sumArray.map(function(obj) {
var me = Object.assign({}, obj);
var i=0;
me.color = color[i++];
return me;
});
输出
[{"sum":1,"color":"#FF0F00"},{"sum":2,"color":"#FF0F00"},
{"sum":3,"color":"#FF0F00"},{"sum":4,"color":"#FF0F00"},
{"sum":5,"color":"#FF0F00"},{"sum":6,"color":"#FF0F00"}]
预期输出
[{"sum":1,"color":"#FF0F00"},{"sum":2,"color":"#FF6600"},
{"sum":3,"color":"#FF9E01"},{"sum":4,"color":"#FF0F00"},
{"sum":5,"color":"#FF6600"},{"sum":6,"color":"#FF9E01"}]
如果对象大小大于颜色数组大小,则值从头开始循环。
我尽力通过引用。但失败了。提前致谢
答案 0 :(得分:2)
您希望在循环外定义迭代器,并在达到最小数组长度时将其重置为零
var sumArray = [{"sum":1},{"sum":2},{"sum":3},{"sum":4},{"sum":5},{"sum":6}]
var color = ["#FF0F00","#FF6600","#FF9E01"];
var combinedObj = sumArray.reduce( (a,b,i) =>
(a.push(Object.assign({}, b, {color:color[i%color.length]})), a)
, []);
console.log( JSON.stringify(combinedObj, 0, 4) )

你可以改为减少数组
trainfile = open('train.csv')
features_train = np.loadtxt(trainfile, delimiter=',', usecols = (2,4,5,9), skiprows = 1)
labels_train = np.loadtxt(trainfile, usecols = (1,), skiprows = 1)

答案 1 :(得分:0)
您的问题在这一行:
var i=0;
将其移出循环,并且在循环中增量必须为:
i = (i + 1) % color.length;
var sumArray=[{"sum":1},{"sum":2},{"sum":3},{"sum":4},{"sum":5},{"sum":6}]
var color=["#FF0F00","#FF6600","#FF9E01"];
var i=0;
var combinedObj = sumArray.map(function(obj) {
var me = Object.assign({}, obj);
me.color = color[i];
i = (i + 1) % color.length;
return me;
});
console.log(combinedObj);
避免全局变量的另一种方法可以基于第二个映射参数:
var sumArray=[{"sum":1},{"sum":2},{"sum":3},{"sum":4},{"sum":5},{"sum":6}]
var color=["#FF0F00","#FF6600","#FF9E01"];
var combinedObj = sumArray.map(function(obj, idx) {
var me = Object.assign({}, obj);
me.color = color[idx % color.length];
return me;
});
console.log(combinedObj);
答案 2 :(得分:0)
只需检查i
值是否为3,然后将其分配回0
var sumArray = [{
"sum": 1
}, {
"sum": 2
}, {
"sum": 3
}, {
"sum": 4
}, {
"sum": 5
}, {
"sum": 6
}]
var color = ["#FF0F00", "#FF6600", "#FF9E01"];
var i = 0;
var combinedObj = sumArray.map(function(obj) {
obj.color = color[i];
i++;
if (i === 3) {
i = 0;
}
return obj
}, {});
console.log(combinedObj)