2017-02-22 20 views
0

Dynamic суммирующий в качестве ключевого значения объекта

var dataJson = JSON.stringify({ 
 
    "11501": { 
 
    "Name": "11501", 
 
    "RecipeName": "N", 
 
    "Time": 10, 
 
    "Ingredient1ID": 1, 
 
    "Ingredient1Quantity": 2, 
 
    }, 
 
    "11502": { 
 
    "Name": "11502", 
 
    "RecipeName": "N", 
 
    "Time": 10, 
 
    "Ingredient1ID": 2, 
 
    "Ingredient1Quantity": 2, 
 
    }, 
 
    }); 
 
var jsonobject = JSON.parse(dataJson); 
 
element = {}; 
 

 
function addElement(e, t) { 
 
    element[jsonobject[e]['Ingredient1ID']] += jsonobject[e]['Ingredient1Quantity']; 
 
    console.log(element); 
 
}

 

 
    <button type="button" class="btn bg-purple btn-flat margin" onclick="addElement(11501,10);"> 
 
    <i class="fa fa-plus"></i> Add to queue 
 
</button> 
 
<button type="button" class="btn bg-purple btn-flat margin" onclick="addElement(11502,10);"> 
 
    <i class="fa fa-plus"></i> Add to queue item2 
 
</button>

addElement есть функция OnClick его предполагается подвести количество элемента [ключ] на каждый клик, если ключ существует, то он должен добавить значение, такие как + =.

В настоящее время он выводит объект {11001: NaN}, поскольку он не имеет базового значения. Я не могу обеспечить базовое значение для ключа, так как они являются динамическим номер Примером:

Сначала нажмите

Объекта {ID: Кол-во}

Объекта {11501: 2}

Объекта {11501: 2 + 2}

Есть ли возможность реализовать эту функциональность? Это может быть массив, если его проще.

https://jsfiddle.net/fxfLemtu/

+0

я не могу проверить свой код, потому что некоторые части отсутствуют, но я полагаю, что addElement вызывается из события и, следовательно, параметр «е» это событие, попробуйте поставить т вместо e. – misterwolf

+0

e is id t is name – user2945583

+0

, пожалуйста, добавьте полный и рабочий код, из того, что вы опубликовали, вы явно добавляете строки – Ionut

ответ

1

Посмотрите на этот пример. Надеюсь, я понял, что вы пытаетесь сделать.

var queue = {}; 
 
var jsonobject = { 
 
    "11501": { 
 
    "Ingredient1ID": 1, 
 
    "Ingredient1Quantity": 2, 
 
    }, 
 
    "11502": { 
 
    "Ingredient1ID": 2, 
 
    "Ingredient1Quantity": 2, 
 
    } 
 
}; 
 

 
function addElement(e, t) { 
 
    var elementId = jsonobject[e]['Ingredient1ID']; 
 
    var elementQuantity = jsonobject[e]['Ingredient1Quantity']; 
 
    
 
    if (!(elementId in queue)) { 
 
    queue[elementId] = elementQuantity; 
 
    } else { 
 
    queue[elementId] += elementQuantity; 
 
    } 
 
    
 
    console.log(queue); 
 
}
<button type="button" onclick="addElement(11501,10);">Add item1 to queue</button> 
 
<button type="button" onclick="addElement(11502,10);">Add item2 to queue</button>

+0

Точно :) что я искал – user2945583

+0

, так как вы конвертируете некоторые строки из бэкэнд в объекты json, некоторые числовые значения могут нуждаться в синтаксическом анализе, – Ionut

2

Вы должны использовать parseInt() на вашем количестве, а затем добавить. Это сработает. В настоящее время вы пытаетесь добавить значения, которые не являются целыми числами. Спасибо

+0

К сожалению, это еще NaN hm – user2945583

+0

console.log ваши разные переменные и проверьте, что происходит в этих переменных. например jsonobject [e] ['Ingredient1ID'], e и т. д. – Owais

+0

Объект {11001: NaN, 11501: NaN, 12012: NaN, 13001: NaN} – user2945583