我做了这个沙箱测试:
<html>
<head>
<title>whatever</title>
<script type="text/javascript">
function myLittleTest() {
var obj, arr, armap;
arr = [1, 2, 3, 5, 7, 11];
obj = {};
obj = arr;
alert (typeof arr);
alert (typeof obj);
// doesn't work in IE
armap = obj.map(function (x) { return x * x; });
alert (typeof armap);
}
myLittleTest();
</script>
</head>
<body>
</body>
</html>
我意识到我可以使用jQuery的函数$ .map来使代码行工作,但是,我在javascript数据类型上缺少什么?
答案 0 :(得分:56)
如果你有一个类似于数组的对象(比如arguments
),你可以通过调用Array.prototype.slice.call(o)
得到一个真正的数组。
var o = {0:"a", 1:'b', length:2};
var a = Array.prototype.slice.call(o);
a
将为["a", "b"]
。这只有在您正确设置length
属性时才能正常工作。
答案 1 :(得分:24)
我觉得你太努力了......
使用jQuery(或类似的库)最简单
对于这个对象:
var obj = {a: 1, b: 2, c: 3};
数组有一个固定的密钥系统,所以对于上面的对象,你必须扔掉密钥(a,b,c)或值(1,2,3)
所以要么:
var arr = $.map(obj, function (value, key) { return value; });
或者这个:
var arr = $.map(obj, function (value, key) { return key; });
答案 2 :(得分:7)
一年前,但是我可以提一下jQuery的makeArray函数http://api.jquery.com/jQuery.makeArray/
答案 3 :(得分:5)
我很确定这不是类型问题,因为IE在IE 9之前没有Array.map()
函数。请参阅http://msdn.microsoft.com/en-us/library/k4h76zbx(v=VS.85).aspx以获取支持的函数列表。有关IE 9中Array.map()
功能的说明,请参阅http://msdn.microsoft.com/en-us/library/ff679976(v=VS.94).aspx。
答案 4 :(得分:5)
使用for
循环获得最大的浏览器兼容性。
在Javascript中,所有数组都是对象,但并非所有对象都是数组。请查看 this Perfection Kills page ,其中介绍了如何检查某些内容是否为数组。
要检查数组,可以使用Object.prototype.toString.call(theObject)
。对于作为数组的对象,这将返回[object Array]
,对于不是数组的对象,将返回[object Object]
(参见下面的示例):
function myLittleTest()
{
var obj, arr, armap, i;
// arr is an object and an array
arr = [1, 2, 3, 5, 7, 11];
obj = {}; // obj is only an object... not an array
alert (Object.prototype.toString.call(obj));
// ^ Output: [object Object]
obj = arr; // obj is now an array and an object
alert (Object.prototype.toString.call(arr));
alert (Object.prototype.toString.call(obj));
// ^ Output for both: [object Array]
// works in IE
armap = [];
for(i = 0; i < obj.length; ++i)
{
armap.push(obj[i] * obj[i]);
}
alert (armap.join(", "));
}
// Changed from prueba();
myLittleTest();
答案 5 :(得分:2)
在用于操作对象和数组的许多其他小实用程序中,Underscore.js提供了toArray(obj)
辅助方法。这里的文档:http://underscorejs.org/#toArray
从编写文档的方式来看,这并不完全明显,但它就像任意对象上的魅力一样。给定一个对象时,它会遍历这些值并返回一个只包含这些值的列表。