2013-04-20 4 views
0

У меня есть набор переменных, которые представляют цены и количество предметов, проданных в 2-мерном массиве. I отсортировали его, чтобы найти самую низкую цену.Как я могу ссылаться на переменную, хранящуюся в массиве, а не на ее значение?

Я хотел бы установить вторую переменную (номер проданной) первого элемента (игрока A) в значение (200), обратившись к массиву.

Например:

var playerASold; 

var arr=[ 
    [playerAPrice,playerASold], 
    [playerBPrice,playerBSold], 
    [playerCPrice,playerCSold]]; 

arr[0][1]=200; 

это не работает, вероятно, потому, что playerASold в настоящее время имеет значение 0, и пытается установить 0 = 0.

Как обращаться к переменной, а не по значению переменной?

ответ

2

JavaScript не имеет понятия указателей C или ссылок на C++, поэтому вам придется делать это по-другому. Вместо того, чтобы пытаться хранить ссылки в массиве, попробуйте сделать массив единственным держателем данных.
Это может выглядеть следующим образом:

var players = [ 
    { price: 5, sold: 1 }, 
    { price: 3, sold: 6 }, 
    { price: 9, sold: 2 } 
]; 

Тогда вместо, скажем, playerBSold, вы можете использовать players[1].sold. Теперь вы можете использовать переменную вместо 1, если хотите.

+0

Проблема в том, что проданная сумма не установлена. Я определю, сколько из них продано, выясняя, кто самый дешевый игрок (ы). У меня 5 человек вводят цены в текстовые поля, а затем javascript захватывает эти цены и видит, какие из них самые низкие. Я делаю это с видом, который переупорядочивает игроков. Затем я хочу «купить» продукцию только у игроков с самой низкой ценой и разделить мой запас между ними. Я не понимаю, как я буду отслеживать, кто был победителем с этим решением. Вот почему я хотел оставить имя игрока привязанным к цене. Имеет ли это смысл? –

+0

@ThomasGaskin: Вы можете сохранить имя игрока с дополнительным свойством 'name', например,' {name: "A", price: 5, sold: 1} '. Стоит отметить, что вы можете добавлять свойства в любое время; вы могли бы просто установить «игроки [1] .balance' и начать использовать его. – icktoofay

+0

@ThomasGaskin: Кроме того, создание всего массива таких объектов упрощает сортировку: 'players.sort (function (a, b) {return a.price - b.price;});' делает игроков отсортированными с наименьшего " цена' до наибольшей «цены». – icktoofay

0

Просто внимательно посмотрите на свой код, который вы устанавливаете для массива. Вы заменяете arr [0] [1] значение item.previously это был playerASold, то есть 0 и теперь 200. Таким образом, вы не назначаете значение playerSold .Не так:

var arr=[[playerAPrice:0,playerASold:0],[playerBPrice:0,playerBSold:0], [playerCPrice:0,playerCSold:0]]; 

и использовать это:

arr[0].playerASold=200. 
0

Javascript примитивов (в данном случае число) неизменны. I.e., вы не можете изменить их значения. Операции над номерами создают новые числа. Объекты, однако, изменяемы.

Как было предложено icktoofay, рефакторинг как изменчивых объектов Игрока с ценой и проданными свойствами, вероятно, является хорошей идеей здесь.

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