【问题标题】:Reset arrays value inside angular.foreach loop在 angular.foreach 循环中重置数组值
【发布时间】:2017-10-06 01:28:14
【问题描述】:

我有一个这样的空对象数组:

var a = [ {}, {}, {}, {}, {}, {} ];

还有一组属性:

var colors = ["red", "green", "blue"];

我需要将“颜色”中的每种颜色分配给具有角度 foreach 的“a”数组的每个元素。但是“a”数组的长度大于“colors”。我想“按圆圈”分配颜色所以结果需要是这样的:

var a = [
    {color: "red"},
    {color: "green"},
    {color: "blue"},
    {color: "red"},
    {color: "green"},
    {color: "blue"},
    {color: "red"}
];

angular.forEach(a, function(elem, index) {
  if (a.length > colors.length) {
    // .......                       
  }
  elem.color = colors[index];
});

问题:有没有办法重置 foreach 的索引以从头开始循环“colors”数组?感谢您的帮助

【问题讨论】:

  • 试试这个elem.color = colors[index % colors.length];
  • @Hadi 感谢您的帮助!

标签: javascript angularjs arrays foreach


【解决方案1】:

试试javascriptmap这样的函数

var a = [ {}, {}, {}, {}, {}, {}, {} ]; 
var colors = ["red", "green", "blue"];

a = a.map(function(o,i){
    var color =  (colors[i]) ? colors[i] : callFunc(i);    
    o.color =color;
    
    return o;
    
    function callFunc(i){
       var diff = (i - colors.length)% (colors.length)
       return colors[diff]
    }
})

console.log(a)

【讨论】:

    【解决方案2】:

    试试这个

    var a = [ {}, {}, {}, {}, {}, {} ];
    var colors = ["red", "green", "blue"];
    
    a.forEach(function(item,key){
        item.color = colors[key % colors.length];
    })
    console.log(a)
    

    【讨论】:

      【解决方案3】:

      你可以简单地在 foreach 中设置一个计数器 i。在每次迭代增量中,我喜欢 i++,一旦达到颜色数组的长度,只需像 i=0 一样重置它,颜色 [i] 可用于获取颜色名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        • 2011-01-01
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多