【问题标题】:Javascript changing value in multidimensional arrayJavascript改变多维数组中的值
【发布时间】:2017-07-21 16:27:29
【问题描述】:

我尝试用 Json 文件中的内容填充多维数组。

问题是,我无法更新数组中的内容:

if(j>i && hoursYy == hoursY && secondsX == secondsXx){
  wocheArray[i].count = wocheArray[i].count + 1;
}

我的目标是,每次在我的 JSON 文件中找到重复项时,“计数”都会增加。我在网上找不到答案。

以防万一,这里是整个代码:

var myweek;
var x;
var y;
var id;
var count;
var wocheArray = [];

function preload(){
myweek = loadJSON("data/data.json");
}

function setup(){
createCanvas(windowWidth, windowHeight);
background(0);

//SAVE IN WOCHEARRAY
for (var i = 0; i < myweek.woche.length; i++) {

hoursY = myweek.woche[i].stunden;
secondsX = myweek.woche[i].sekunden;

for (var j=0; j< myweek.woche.length; j++){
 hoursYy = myweek.woche[j].stunden;
 secondsXx = myweek.woche[j].sekunden;

if(j>i && hoursYy == hoursY && secondsX == secondsXx){
  wocheArray[i].count = wocheArray[i].count + 1;
}

else {
  x = myweek.woche[i].stunden;
  y = myweek.woche[i].sekunden;
  id = myweek.woche[i].person;
  count = 0;
  }
wocheArray[i] = {x, y, count, id};
}
}
console.log(wocheArray);
}

【问题讨论】:

  • 这个问题更容易data.json中的一些示例来回答,可能用你的@代码回答987654324@函数。
  • 可能是 wocheArray[i][count]
  • data.json 看起来像这样:{ "woche": [ { "stunden": 0, "sekunden": 6, "person": "b" },...
  • 我想这很容易,因为我对 javascript 比较陌生。我删除了map-元素。但我用console.log 进行了检查。 Array wocheArray[ ] 是完美的,除了 count 部分。

标签: javascript arrays json multidimensional-array


【解决方案1】:

问题出在这里:

wocheArray[i] = {x, y, count, id};

如果你检查你的代码,你会发现这部分被覆盖了。

考虑您的情况:如果发现重复项。

那么你的 for 循环会做什么:-

1.) 设置var count = 0;

2.) [跳到 If 条件检查的程序在哪里]

//IF match found (at j = 2 location, and i = 1)
//then what happen is : 

if(2>1 && hoursYy == hoursY && secondsX == secondsXx){
   wocheArray[1].count = wocheArray[1].count + 1;
// from here the count of wocheArray[1] would be increased by 1, Suppose 1.
}

3) 在 else 块中它会再次设置 count = 0;

4) 您再次尝试设置 wocheArray[1] = {x, y, count, id}; 的值 //现在 wocheArray[1] 计数设置为 0。

所以从这里,您可以看到您正在更新值或覆盖它们,这会产生不想要的结果。

你不应该在外面打电话wocheArray[i] = {x, y, count, id};

您必须在 else 块中调用它才能使其正常工作。

else{
x = ....
....
....
count = 0;
wocheArray[i] = {x, y, count, id};
}

但是,我对在 else 块中使用 count = 0; 感到好奇,因为它在这里什么都不做,而在 for 块中使用 var count =0; 只是重新初始化计数变量,这是浪费内存或不是一个好习惯。根据显示的代码示例。

【讨论】:

    【解决方案2】:

    如果你的代码格式更好一点,你会看到

    wocheArray[i] = {x, y, count, id};
    

    在您的if else 之外。所以 wocheArray[i] 在每个循环结束时都会被覆盖。

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多