2016-09-29 101 views
1

我一直試圖接收一個對象作爲參數,並將其作爲數組返回,但沒有運氣。我不明白爲什麼它可能是代碼中的任何問題。在這一點上我可能會迷失方向,或者完全脫離邏輯。接收一個對象(參數)並返回一個數組

function att(testobj) { 
    var q = ""; 
    for(var i = 0; i < testobj.length ; i++){ 
     q += testobj[i] + " "; 
    } 
    return q; 
} 

var obj1= { 
    Big: 10, 
    low: 5 
}; 

var attObj1= att(obj1); 
console.log(attObj1); 

var obj2= { 
    a: 10, 
    b: 20, 
    c: 30 
}; 

var attObj2= att(obj2); 
console.log(attObj2); 

我曾嘗試在代碼中做一個for循環在那裏檢查每個數組的長度,並使用排序q += testobj[i],但我沒有得到任何結果。只是一個空白控制檯日誌。

+0

謝謝Filburt爲編輯:) – WeInThis

+0

'testobj.length':對象沒有一個'length'屬性就像數組一樣。如果你想迭代它們,使用'Object.keys'。 – vlaz

+0

請添加需要的輸出。 –

回答

1

您可以迭代鍵並返回聯接值。使用

方法:

  • Object.keys用於從所述對象獲取的所有鍵,
  • Array#join轉換陣列以與給定的字符串作爲膠的字符串。

function att(testobj) { 
 
    return Object.keys(testobj).join(', '); 
 
} 
 

 
var obj1= { 
 
    Big: 10, 
 
    low: 5 
 
}; 
 

 
var attObj1= att(obj1); 
 
console.log(attObj1); 
 

 
var obj2= { 
 
    a: 10, 
 
    b: 20, 
 
    c: 30 
 
}; 
 

 
var attObj2= att(obj2); 
 
console.log(attObj2);

+0

噢,你能解釋一下Object.keys(testobj).map(函數(k)的意思嗎?我完全不理解那個部分:)如果你有時間了! – WeInThis

+1

'.map(function(k){return k;})'不必要的步驟 - 它將返回相同的數組。唯一的好處是它會被複制,但是Object.keys已經構建了一個新的,所以沒有任何好處。 – vlaz

+0

這很聰明,我會說。不是我自己會做的。但是,謝謝!總是很好學習額外!:) – WeInThis

1

雖然Array在技術上是一個Object,一個區別是,它們可以遍歷。

因此,舉例來說,你可以這樣做:

var someArray = ['some', 'value', 'here']; 
 

 
for (var i = 0; i <= someArray.length; i++) { 
 
    console.log(someArray[i]); 
 
}

然而,一個對象,你不能因爲它不包含迭代功能。

如果要交替遍歷ObjectArray,則需要考慮使用支持兩者的方法。

例如:

function iterateOver(obj) { 
 
    for (var k in obj) { 
 
    console.log('Key', k, 'Value', obj[k]); 
 
    } 
 
} 
 

 
var someArray = ['some', 'value', 'here']; 
 
var someObject = { 
 
    some: 'value', 
 
    another: 'great_value' 
 
}; 
 

 
iterateOver(someArray); 
 
iterateOver(someObject);

+0

Ohhhhh好吧!現在我懂了!我會說這是很好的解釋。現在我明白了一切!謝謝約瑟夫! :) – WeInThis

相關問題