【问题标题】:How can i declare array indexing value in an array using JS?如何使用 JS 在数组中声明数组索引值?
【发布时间】:2019-03-29 22:20:21
【问题描述】:

我已经在函数内部发起了一个数组,比如

function initColor(r) { 

 r[0].color = "#007FFF", r[1].color = "#A142FF", r[2].color = "#FF85C2", r[3].color = "#FFA142", r[4].color = "#FF4242";

    for (var o = 5; o < r.length; o++) {
        var t = d3.color(r[o % 4 + 1].color);
        r[o].color = t.brighter(1.5).toString()
    }
}

当我尝试调用函数 initColor() 时,我遇到了类似的错误

TypeError: 无法设置未定义的属性“颜色”

我的代码有什么错误?

【问题讨论】:

  • r 必须已经填充了对象才能使该代码工作,听起来好像不是。
  • 你能举个例子吗@CertainPerformance
  • (r[0] = r[0] || {}).color替换r[0].color
  • @Siddharthaesunuri 你的原始数组(r)要么是空的,要么根本不存在,就是这样。
  • @Siddharthaesunuri 例如,[{}, {}] 将是一个包含两个空对象的数组。如果数组中没有元素,则不能添加或更改数组元素的属性。

标签: javascript d3.js


【解决方案1】:

据我现在理解和测试,我认为这里有几个错误。

首先,如 cmets 所示,您的数组必须包含对象。否则你不能改变颜色属性(或设置它)。

r[0].color = "#007FFF", r[1].color = "#A142FF", r[2].color = "#FF85C2", r[3].color = "#FFA142", r[4].color = "#FF4242";

在这里,您尝试设置/更改给定数组中前 5 个元素的颜色属性。如果仅缺少其中一个元素(或不是对象类型),则会抛出您提到的错误。

但是您的代码中还有另一个错误:

for (var o = 5; o < r.length; o++) {
    var t = d3.color(r[o % 4 + 1].color);
    r[o].color = t.brighter(1.5).toString()
}

变量 o 初始化为 5。由于您只尝试设置数组中前 5 个元素的颜色,我想您知道,在调用此函数时,您的数组仅包含 5 个元素。

o 将始终等于 r.length,因此永远不会使用循环。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    相关资源
    最近更新 更多