2013-06-02 31 views
4

比方說,我有一個數組var arr = [3,4,5,6,7,9];我日誌像這樣的內容:更改數組值時,條件在javascript滿足

$.each(arr, function(k, v) { 
    console.log(v); 
} 

當我登錄我要檢查,如果當前值大於內容例如var limit = 5;

如果當前值大於limit我想替換/更改該值,讓我們說的字母A並打印出來。所以我的登錄arr陣列看起來像這樣3,4,5,A,A,A

我在想是這樣的:

$.each(arr, function(k,v) { 
    if (v > limit) { 
    // set this specific value equal to limit 
    // log changed value 
    } 
    console.log(v); // otherwise just log the value found 
}); 

我想這一點,但什麼都不做,沒有任何錯誤。

+0

您的代碼似乎好。除了丟失的大括號。雖然第一個代碼段缺少右括號。 – kirelagin

+1

另請注意,根據您的評論,您將打印每個修改後的值_twice_。 – kirelagin

回答

8

的jsfiddle:http://jsfiddle.net/nsgch/8/

var arr = [3,4,5,6,7,9]; 
var limit = 5; 

$.each(arr, function(k,v) { 
    if (v > limit) { 
     arr[k] = 'A'; 
    } 
    console.log(arr[k]); 
}); 
2

這取決於你是如何做的 「設置爲限制這種特定的價值。」如果你在做;

$.each(arr, function(k,v) { 
    if (v > limit) { 
    v = "A"; 
    // log changed value 
    } 
    console.log(v); // otherwise just log the value found 
}); 

你正在發生變化只是局部變量v,而不是元素arr[k]。您可以更新arr[k],如@san.chez answer或使用$.map;

var filtered = $.map(arr, function(v,k) { 
    if (v > limit) { 
    return "A"; 
    } 

    return v; 
}); 

...然後filtered將是你的陣列[1,2,4,A,A]arr將保持不變。請注意交換kv參數; jQuery是這樣/諷刺


還要注意,目前您的代碼示例缺少結束}一致。

1
var arr = [3,4,5,6,7,9]; 
arr=arr.map(function(elem){ return elem>5?"A":elem; }); 
arr.forEach(function(elem){ 
    console.log(elem); 
}) 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

+0

值得注意的是'Array.prototype.map'是一個ES5方法,並且*** not ***跨瀏覽器;可以添加[ES5 shim](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Compatibility)以確保支持舊瀏覽器 – Matt

+0

至於I可以看到,我發佈的鏈接中存在兼容性信息。如果你有一個較舊的瀏覽器,你可以免費下載一個新的:) –

+1

我知道你發佈的鏈接中有一個兼容性部分(該鏈接指向該部分的填充* I *),但僅用於*駕駛者*不點擊你的鏈接,重要的是要注意。 – Matt