无法弄清楚如何"绑定"值在一个数组中

时间:2015-07-19 00:54:22

标签: javascript arrays node.js

所以我需要创建一个看起来像这样的数组

var cols = [
      ["#1ABC9C", "0%"],
      ["#1ABC9C", "33.3%"],
      ["#EC7063", "33.3%"],
      ["#EC7063", "66.6%"],
      ["#3498DB", "66.6%"],
      ["#3498DB", "100%"]
];

现在我能够生成到目前为止

["#000", 0, "#000", 33.333333333333336, "#4AF2A1", 33.333333333333336, "#4AF2A1", 33.333333333333336, "#FC4831", 33.333333333333336, "#FC4831", 100]

我在这里做的是获取数组中的第二个值,并添加一个0,因为那是起点应该是什么,我也做了同样的事情。值,但设置为100。

这是我在生成"时得到的结果。应该在数组中的值

33.3, 66.6, 100

现在我需要做的是用我得到的值替换第二个数组,使它看起来像第一个。有任何想法吗?值33.3, 66.6, 100是动态的,因此它们可以是25,50,75,100或其他任何值,但它们都是整数。这意味着最终的数组看起来像这样

var cols = [
        ["#1ABC9C", "0%"],
        ["#1ABC9C", "25%"],
        ["#EC7063", "25%"],      
        ["#009DFF", "50%"],
        ["#009DFF", "50%"],
        ["#EC7063", "75%"],
        ["#3498DB", "75%"],
        ["#3498DB", "100%"]
];

2 个答案:

答案 0 :(得分:2)

此函数将采用表示颜色的一维字符串数组,并返回带有颜色的二维数组和一个小数的适当百分比,就像您描述的那样。检查浏览器中开发人员工具中的控制台以获取输出。

function colDistr(input) {
    var result = [], step = 0;
    for (i in input) {
        if (i % 2) step++;
        var perc = Math.floor(step * 2000 / input.length) / 10;
        result.push([input[i], perc + "%"]);
    }
    return result;
}

console.log(colDistr(["#1ABC9C","#1ABC9C","#EC7063","#EC7063","#3498DB","#3498DB"]));

如果输入是一个只包含一次颜色的数组,则变为:

function colDistr(input) {
    var result = [], step = 0;
    for (i = 0; i < input.length * 2; i++) {
        if (i % 2) step++;
        var perc = Math.floor(step * 1000 / input.length) / 10;
        result.push([input[i - step], perc + "%"]);
    }
    return result;
}

console.log(colDistr(["#1ABC9C","#EC7063","#3498DB"]));

答案 1 :(得分:0)

var ary = ["#000", 0, "#000", 33.333333333333336, "#4AF2A1", 33.333333333333336, "#4AF2A1", 33.333333333333336, "#FC4831", 33.333333333333336, "#FC4831", 100];
var res = [];

for (i = 0; i < ary.length; i+=2) { 
  res.push([ ary[i], Math.round(ary[i + 1]) + '%' ]);
}

console.log(res);

输出:

[ [ '#000', '0%' ],
  [ '#000', '33%' ],
  [ '#4AF2A1', '33%' ],
  [ '#4AF2A1', '33%' ],
  [ '#FC4831', '33%' ],
  [ '#FC4831', '100%' ] ]

这很简单 - 我们使用for循环遍历数组。对于每次迭代,我们从数组中取两个值并将它们推送到结果中。每次迭代i迭代计数器增加2而不是标准i++

Math.round(ary[i + 1])

将数字舍入为最接近的整数。