[英]iterate object key value as an array
我試圖理解迭代對象數組:
var obj = {0:'a',1:'b'}
function logArgs(){
Array.prototype.forEach.call(arguments,function(elem,idx){
console.log(idx + '. ' + elem);
})
}
//now calling this fails:
logArgs(obj)
//logs
0. [object object]
但我想要這樣的結果:
0. a
1. b
它不是類似數組的對象,因為它缺少一項關鍵功能。 length
屬性。
要遍歷對象,可以使用以下代碼:
for (var key in obj) {
// Protect against inherited properties.
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}
在ES5中,您可以執行以下操作:
Object.keys(obj).forEach(
function(key) {
var val = obj[key];
console.log([key, val]);
}
);
重要筆記
[1, 0]
。 我會使用Object.keys()
以不同的方式進行操作
請參閱小提琴
var obj = {0:'a',1:'b'}
var keys = Object.keys(obj);
keys.forEach(function(key){
console.log(key + '. ' + obj[key]);
});
在OP功能中使用相同的邏輯。
var obj = {0:'a',1:'b'}
function logArgs(obj){
var keys = Object.keys(obj);
keys.forEach(function(key){
console.log(key + '. ' + obj[key]);
});
}
logArgs(obj)
日志:
0. a
1. b
對象屬性的通常迭代是這樣的:
var obj = {'0':'a', '1':'b'};
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
// property name is in prop
// value is in obj[prop]
console.log(prop + ": " + obj[prop]);
}
}
工作演示: http : //jsfiddle.net/jfriend00/45jwx6zg/
請記住,(按照語言規范)對象的屬性不是按任何保證的順序排列的,並且所有屬性名稱都是字符串值。
您不能像數組那樣直接迭代對象(甚至是具有0、1、2 ... n作為屬性的對象),因為它沒有.length
屬性。 您可以(盡管我不知道為什么這樣做會有用),使用Object.keys()
將對象的屬性提取到數組中,然后將其用於迭代,但是我不清楚為什么會有這樣的事情有用的代碼,而不僅僅是所需的復雜代碼。
var obj = {'0':'a', '1':'b'};
Object.keys(obj).forEach(function(prop) {
console.log(prop + ": " + obj[prop]);
});
除非您想為按鍵提供自定義排序,否則我看不出有任何理由這樣做。 Object.keys()
也需要IE9或更高版本。
要遍歷傳遞給函數的每個對象參數的鍵,您需要這樣的東西:
function logArgs(){
Array.prototype.forEach.call(arguments,function(elem,idx){
console.log("argument " + idx);
Object.keys(elem).forEach(function(key) {
console.log(" key " + key + ": " + elem[key]);
});
})
}
對於您的示例對象,將記錄
argument 0
key 0: a
key 1: b
請注意,JavaScript中未定義通過對象屬性名稱(使用for ... in
或使用Object.keys()
進行迭代的順序。 每當您要求密鑰時,運行時環境都可以按照字面上的隨機順序隨意交出密鑰。 當然,他們沒有,但是編寫依賴於此的代碼是一個壞主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.