簡體   English   中英

循環並比較javascript對象

[英]Loop through and compare javascript objects

我有兩個數組,它們是從用戶的輸入創建的,如下所示:

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);

顯然我不能每一個都這樣做,所以,

問題:如何循環遍歷數組並根據鍵進行比較,然后對其值進行操作?

如果兩個數組的長度始終相同並且對象屬性在同一索引處,則應該可以:

http://jsfiddle.net/9DBuD/

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)
            }
        }
    }
}

編輯

即使數組索引和大小不匹配,這個修改過的小提琴和代碼應該產生相同的結果:

http://jsfiddle.net/9DBuD/1/

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)   
        }
    }
}

從技術上講,您使用的是JavaScript對象,而不是數組。 您的變量聲明實際上應該是:

var impArray = {};
var assessArray = {};

一旦有了正確的變量聲明,就可以使用jQuery.each來遍歷鍵(而不是索引):

$.each(impArray, function(key, value){
  $('#comp-'+key).val(assessArray[key]/value*100);
});

這對你有幫助嗎?

$.each(impArray, function(index, value){
  var result = assessArray[index] / value * 100;
  $('#comp-1-'+index).val(result);
});

嘗試使用$.each() ,如:

$.each(impArray, function(i, v){
  $('#comp-'+i).val(v/assessArray[i]*100);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM