2016-09-29 104 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

相关问题