У меня есть два массива, которые создаются из входов пользователя:
var impArray = [];
$('[id^=imp]').on('change', function(){
var value = $(this).val();
var name = ($(this).attr('name').replace('imp-',''))
impArray[name] = value;
console.log(impArray);
})
var assessArray= [];
$('[id^=assess]').on('change', function(){
var value = $(this).val();
var name = ($(this).attr('name').replace('assess-',''))
assessArray[name] = value;
console.log(assessArray);
})
Они создают такие массивы, как
assessAray
1-1: 10
1-2: 15
1-3: 9
impArray
1-1: 6
1-2: 14
1-3: 2
Затем мне нужно сделать простой расчет с помощью соответствующих ключей:
$('#comp-1-1').val(impArray['1-1'] / assessArray['1-1'] * 100);
Очевидно, я не могу сделать это с каждым, так что,
Вопрос: Как я могу перебирать массивы и сравнивать их на основе ключей, а затем делать что-то с их значениями?
Технически вы работаете с объектами JavaScript, а не с массивами. Ваши объявления переменных должны быть:
var impArray = {};
var assessArray = {};
Когда у вас есть правильные объявления переменных, вы можете использовать jQuery.each для итерации через ключи (а не индексы):
$.each(impArray, function(key, value){
$('#comp-'+key).val(assessArray[key]/value*100);
});
Если оба массива всегда будут одинаковой длины и имеют свойство объекта с одним и тем же индексом, это должно работать:
assessArray = [{'1-1':'10'},{'1-2':'15'},{'1-3':'9'}];
impArray = [{'1-1':'6'},{'1-2':'14'},{'1-3':'2'}];
for(var i=0;i<assessArray.length;i++){
for(var prop in assessArray[i]){
for(var property in impArray[i]){
if(prop == property){
$('#comp-'+prop).val(impArray[i][property]/assessArray[i][prop]*100)
}
}
}
}
Эта модифицированная скрипка и код должны давать одинаковые результаты, даже если индексы и размеры массива не совпадают:
Array.prototype.indexOfProp = function (property) {
for (var i = 0, len = this.length; i < len; i++) {
if (this[i][property]!=undefined) return i;
}
return -1;
}
assessArray = [{'1-2':'15'},{'1-3':'9'},{'1-1':'10'},{'1-4':'10'}];
impArray = [{'1-1':'6'},{'1-3':'2'},{'1-2':'14'}];
for(var i=0;i<assessArray.length;i++){
for(var prop in assessArray[i]){
var index = impArray.indexOfProp(prop)
if(index!=-1){
$('#comp-'+prop).val(impArray[index][prop]/assessArray[i][prop]*100)
}
}
}
Попробуйте использовать $.each()
, например:
$.each(impArray, function(i, v){
$('#comp-'+i).val(v/assessArray[i]*100);
});
Это вам помогает?
$.each(impArray, function(index, value){
var result = assessArray[index] / value * 100;
$('#comp-1-'+index).val(result);
});
value / assessArray[index]
и $('#comp-'+index)
.