2015-04-13 2 views
0

Это то, что я пытаюсь сделать,массив, имеющий проблемы в JS

// 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. Я в состоянии обновить его значение

Это не вызывает никаких ошибок, просто не дает мне никакой ценности.

+2

что это "" "+ item.weight + item.quantity, 1' запятая синтаксис? – argentum47

+0

@ argentum47, если я не стану "", тогда он будет принимать вес и количество предметов как число, поэтому для 0 и 0 он даст мне «0», когда я ожидаю «00» – Mathematics

+0

. Я думаю, что у вас неправильное представление о массиве здесь , к элементам массива обращаются числа, 0 1 ... 2, т.е. индекс элементов внутри массива. Попробуйте распечатать countMe после цикла dataFruits. – Sikorski

ответ

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. Например, если weight - 1 и quantity - 2, тогда значение становится 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, и тогда вы всегда приращением только это значение.

0

Я думаю, что массив должен содержать либо все строки, либо целые числа.

var arr = [01, 0]; 

Или

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

Вы должны предпочесть первый метод для простых вычислений ..

Смежные вопросы