[英]Javascript: Iterating over array with non-consecutive keys
我需要迭代一個非連續鍵的數組:
var messages = new Array();
messages[0] = "This is the first message";
messages[3] = "This is another message";
顯然使用for循環的索引將不起作用,因為它取決於順序的鍵:
for (var i=0 ; i<messages.length ; i++) {
alert(messages[i]); // Will only alert the first message, as i is never equal to 3
}
什么是處理這個的規范方法,因為for-each語法不是用於在javascript中迭代數組中的值 ? 謝謝。
慣用的方法是使用一個對象,而不是一個數組。 請務必檢查hasOwnProperty
以確保您不會拾取可能已添加到原型中的雜散物品。
var messages = { };
messages[0] = "This is the first message";
messages[3] = "This is another message";
for (var i in messages) {
if (messages.hasOwnProperty(i))
alert(messages[i]);
}
或者,更現代的方式是使用Object.keys
Object.keys(messages).forEach(prop => {
alert(messages[prop]);
});
如果您計划在IE等舊版瀏覽器中運行它,請務必使用Babel來傳輸該代碼。
for(var i in messages)
{
console.log(messages[i]);
}
你可以忽略undefined
屬性......
for (var i=0 ; i<messages.length ; i++) {
if(messages[i] !== undefined)
alert(messages[i]);
}
或者使用forEach
,它將忽略未聲明屬性... undefined
messages.forEach(function(v,i) {
alert(v);
});
簡單! 如果數組在索引之間有規律的間隙,請執行以下操作:
for (var i = 0 ; i < messages.length; i += gap) {
alert(messages[i]); // Will only alert the messages at the regular interval/gap
}
您可以使用each()
jQuery方法來執行此操作。
$.each(messages, function(index, val){
alert(val);
});
來自jQuery文檔
each()
通用迭代器函數,可用於無縫迭代對象和數組。 具有length屬性的數組和類似數組的對象(例如函數的參數對象)由數字索引迭代,從0到length-1。 其他對象通過其命名屬性進行迭代。
創建數組並將其undefined
為0
和3
,將在1
和2
處創建undefined
值。 試試這個:
$.each(messages, function(i,val) {
if (val) {
alert(val);
}
});
對於具有以下假設的用例:
array.length >== 1
(即:已包含有意義數據的數組)
您對array[1], array[15], array[45]
等數據感興趣的地方
你可以做類似的事情:
var array = ["you","will","become","strong","with","the","codes","padawan"];
var values = [1,5,7];
for (var i = 0; i < values.length; i++){
var cypher = values[i];
console.log(array[cypher]);
}
//will, the, padawan
或許更有意義的事情,例如:
for (var i = 0; i < values.length; i++){
var cypher = values[i];
aService.aFn.(array[cypher],cb);
}
//calls aService.aFn separately for each value array[1] , array[5] , array[7] passed as args
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.