根据顺序更改深度嵌套Javascript对象中同名属性的多个值

Changing multiple values of properties of the same name in a deeply nested Javascript object depending on their order

本文关键字:属性 对象 顺序 深度 Javascript 嵌套      更新时间:2023-09-26

我一直在努力解决这个javascript问题。我有一系列与传递到图形中的数据相关的对象。

我在数组中嵌套了一个对象,看起来像这样:

var questions = [
{
  id: 1,
  Title: 'First Question',
  data: {
    Datasets: [{
      fillColor : 'rgba(151,187,205,0.5)', // Represents 2012
      data : [144,223,442,23,43]
    },{
      fillColor: 'rgba(220,220,220,1)', // Represents 2014
      data : [22,343,23,54,34]
    }]
  {
},
{
  id: 2,
  Title: 'Second Question',
  data: {
    Datasets: [{
      fillColor : 'rgba(151,187,205,0.5)', // Represents 2012
      data : [154,23,442,23,13]
    },{
      fillColor: 'rgba(220,220,210,1)', // Represents 2014
      data : [24,33,23,54,34]
    }]
  }
}];

将有50个这样的问题。我需要为数据集[0]分配不同的颜色。fillColor和Dataset[1]。fillColor分别用于所有问题。

我知道我应该在这里使用for循环,但我很难在巢中深入。我可以为fillColor设置变量吗?即:

var red = // some rgba value;
var two-thousand-twelve;
var two-thousand-fourteen;
Datasets: [{
      fillColor : two-thousand-twelve, // Represents 2012
      data : [154,23,442,23,13]
    },{
      fillColor: two-thousand-fourteen, // Represents 2014
      data : [24,33,23,54,34]
    }]
two-thousand-twelve = red; // how can I make this retroactively update the object?

我将这些更改绑定到onClick按钮,因此对象需要用新数据重新加载。将此变量更新为红色并不会更新对象…

从我一直在阅读我应该尝试使用一个for循环来迭代对象,但我如何区分在数据集数组的两个对象,在巢的深处,并分配它们,使它们可以很容易地编辑?

一个问题一个问题地思考:

var i, question;
for (i = 0; i < questions.length; ++i) {
  question = questions[i];
  question.data.Datasets[0].fillColor = something;
  question.data.Datasets[1].fillColor = somethingElse;
}

如果您发现处理这些长链的引用令人困惑或乏味,您可以通过引入一个函数来分解这些工作:

function updateFillColors(dataset, colors) {
  dataset[0].fillColor = colors[0];
  dataset[1].fillColor = colors[1];
}
var i;
for (i = 0; i < questions.length; ++i)
  updateFillColor(questions[i].data.Dataset, [something, somethingElse]);
例如