将圆形数组分配给对象

时间:2017-09-09 17:35:30

标签: javascript arrays

我对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"}]

如果对象大小大于颜色数组大小,则值从头开始循环。

我尽力通过引用。但失败了。提前致谢

3 个答案:

答案 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)