所以我需要创建一个看起来像这样的数组
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%"]
];
答案 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])
将数字舍入为最接近的整数。