数组中的数组,长度始终为0,json不起作用

时间:2018-12-02 01:59:33

标签: javascript arrays json

我尝试在数组中创建数组,然后将其转发到JSON。

第一个问题,当我尝试使用lista.length或类似命令时,控制台始终返回0。我试图克服此问题并创建另一个数组,但是现在我遇到了JSON问题-始终返回{{1} }-空的[]数组。

lista

来自浏览器的控制台日志:

Console log from browser

我没有更多的主意,不能使用var lista = []; var licz = []; function ListujBledy(value, where) { var checked = document.getElementById(value).checked; var desc; if (value == "blad-tab") { desc = "Nieprzeźroczysta lista graczy."; } else if (value == "blad-tab1") { desc = "Brak listy graczy na początkowym zrzucie ekranu."; } else if (value == "blad-tab2") { desc = "Brak listy graczy na końcowym zrzucie ekranu."; } if (checked == true) { if (lista[where] == undefined) { var temp = []; temp[value] = desc; lista[where] = temp; licz[where] = 1; } else if (licz[where] == 1) { var temp = lista[where]; temp[value] = desc; lista[where] = temp; licz[where] = 2; } else if (licz[where] == 2) { var temp = lista[where]; temp[value] = desc; lista[where] = temp; licz[where] = 3; } } else { if (licz[where] == 1) { delete lista[where]; licz[where] = 0; } else if (licz[where] == 2) { delete lista[where][value]; licz[where] = 1; } else if (licz[where] == 3) { delete lista[where][value]; licz[where] = 2; } } console.log(lista.length); console.log(lista); console.log(JSON.stringify(lista)); console.log("---------------------------------------------------------"); } lista[0]等。一切都必须正常运行。 Eveyrthing来自变量,但是在我一直在寻找有关它的信息的地方,每个人都在键或永久键中使用数字。

代码的编辑版本: 我知道lista[1]可以做得更好,所以我在这里更正了。

https://jsfiddle.net/5vdgLtue/1/

主要问题是,即使执行此操作,https://jsfiddle.net/5vdgLtue/0/数组也会返回此元素,但是checked函数说它为0。

3 个答案:

答案 0 :(得分:0)

看来您可能刚开始使用javascript。请记住,您实际上并未在代码中的任何时候调用该函数。是这种情况还是您不共享已运行的完整代码?

答案 1 :(得分:0)

只有一种情况下数组'lista'可以获取值:'check'== true和'where'== undefined。

在那种情况下,您声明数组'temp'并声明temp [value] = desc。但是,如果“值”包含与“ blad-tab”,“ blad-tab1”或“ blad-tab2”不同的值,则“ desc”保持为空,因此temp [value]具有名称但没有值。然后,您将一个命名的无值项分配给lista [where],这将解释控制台为何显示内容但不显示长度的原因。顺便说一句,如果您将变量命名为'value'以外的其他名称,则会更容易。

问题是您的选择器指向父元素。在jquery中,您可以执行较少的代码,但是假设您没有使用jQuery。尝试类似的东西:

function getDesc(chkboxName) {

  var checkboxes = document.getElementsByName(chkboxName);
	//or use getElementsbyClassName...
  var checkboxesChecked = [];
  // loop over them all
  for (var i=0; i<checkboxes.length; i++) {
     // And stick the checked ones onto an array...
     if (checkboxes[i].checked) {
        checkboxesChecked.push(checkboxes[i]);
     }
  	}

	for (var i=0; i<checkboxesChecked.length; i++) {

		if (checkboxesChecked[i].value === "blad-tab") {
		        desc = "Nieprzeźroczysta lista graczy.";
		    } else if (checkboxesChecked[i].value === "blad-tab1") {
		        desc = "Brak listy graczy na początkowym zrzucie ekranu.";
		    } else if (checkboxesChecked[i].value === "blad-tab2") {
		        desc = "Brak listy graczy na końcowym zrzucie ekranu.";
		    }

		}

	return desc;

	}

请记住,我还没有测试它。此外,如果有帮助,请投票。我可以使用声望点。谢谢。

答案 2 :(得分:0)

This应该回答您的大多数问题。

总结:

  

在javascript中,数组有2种类型:标准数组和关联数组

     

[]-标准数组-仅基于0的​​整数索引

     

{}-关联数组-键可以是任何字符串的javascript对象

您正在做的是以关联方式使用数组。基本上,您是在向数组对象添加属性,这与标准数组不同,在标准数组中,您只能通过零索引数字(例如temp[0]='something'lista[1]='some other thing'等来分配值)。

如果需要数组键集的长度,则可以使用Object.keys(lista).length。这应该可以解决您的问题。