数组在JS中有问题

时间:2015-04-13 06:47:52

标签: javascript arrays

这就是我想要做的,

// declare an array with 16 items, each with intial value = 0
var countMe = [
    ["00", 0],
    ["01", 0],
    ["02", 0],
    ["03", 0],
    ["10", 0],
    ["11", 0],
    ["12", 0],
    ["13", 0],
    ["20", 0],
    ["21", 0],
    ["22", 0],
    ["23", 0],
    ["30", 0],
    ["31", 0],
    ["32", 0],
    ["33", 0]
];

// calculate number of items for each array item by adding +1 to its previous value
$.each(dataFruits, function (index, item) {
    if (item.weight > -1 && item.quantity > -1) {
        countMe["" + item.weight + item.quantity, 1][1] = countMe["" + item.weight + item.quantity, 1][1] + 1;
    }
});

// go through array and call method for each array item whose value is more then zero
for (var i = 0; i < 3; i++) {
    for (var j = 0; j < 3; j++) {
        if (countMe["" + i + j, 1][1] > 0) {
            CreateText(countMe["" + i + j, 1][1], "black", 33, countMe["" + i + j, 0][0]);
        }
    }
}

问题

  1. 我无法获得数组的值

  2. 我可以更新其值

  3. 它不会抛出任何错误,只是不给我任何价值。

2 个答案:

答案 0 :(得分:3)

对于这种情况,您应该使用普通的JavaScript对象(键值对)。

// Create a JavaScript object
var countMe = {};

for (var i = 0; i < 4; i += 1) {
    for (var j = 0; j < 4; j += 1) {
        // Create new keys and initialize them with 0.
        countMe["" + i + j] = 0;
    }
}

console.log(countMe);

将是

{ '10': 0,
  '11': 0,
  '12': 0,
  '13': 0,
  '20': 0,
  '21': 0,
  '22': 0,
  '23': 0,
  '30': 0,
  '31': 0,
  '32': 0,
  '33': 0,
  '00': 0,
  '01': 0,
  '02': 0,
  '03': 0 }

因此我们创建了一个JavaScript对象,然后你可以像这样计算

$.each(dataFruits, function (index, item) {
    if (item.weight > -1 && item.quantity > -1) {
        countMe["" + item.weight + item.quantity]++;
    }
});

此处,countMe["" + item.weight + item.quantity]++会增加与"" + item.weight + item.quantity对应的数字。例如,如果weight1quantity2,则该值将变为countMe["12"],并且对其的值将增加。

现在你计算了这些值,你可以像这样调用函数

for (var i = 0; i < 4; i += 1) {
    for (var j = 0; j < 4; j += 1) {
        if (countMe["" + i + j] > 0) {
            CreateText(countMe["" + i + j], "black", 33, "" + i + j);
        }
    }
}

实际问题

当你这样做时

countMe["" + item.weight + item.quantity, 1]

索引部分

"" + item.weight + item.quantity, 1

将始终被评估为1,因为逗号运算符会将其中的最后一个元素作为表达式的结果。您可以像这样确认

console.log((1, 2, 3, 4));
// 4

var a = (1, 2, 3, 4);
console.log(a);
// 4

所以,你总是访问["01", 0],因为那是索引1的元素,然后你总是只递增那个值。

答案 1 :(得分:0)

我认为数组应该包含所有字符串或所有整数。

var arr = [01, 0];

或者

var arr = ["01", "0"]

您应该首选方法,以便于计算..