我在阅读$.map()
jquery函数
// The following object masquerades as an array.
var fakeArray = {"length": 1, 0: "Addy", 1: "Subtracty"};
// Therefore, convert it to a real array
var realArray = $.makeArray( fakeArray )
// Now it can be used reliably with $.map()
$.map( realArray, function(val, i) { // do something });
但似乎有$ .makeArray()
的问题让我们看看下面的例子:
var fakeArr = {0,1,2};
var realArr = $.makeArray(fakeArr);
if($.type(realArr)==="array")
$('div').text(realArr.join());// doesn't return the array text
我也试过了$.isArray()
,这也没有导致数组
但如果我这样做:
var realArr = [0,1,2];
if($.type(realArr)==="array")
$('div').text(realArr.join());// returns the array text
那么,$.makeArray
真的会返回真正的数组吗?
答案 0 :(得分:1)
var fakeArr = {0,1,2};
这在javascript中无效。
请参阅$.makeArray
的说明,它用于将类似数组的对象转换为真正的JavaScript数组。像NodeList
之类的东西被称为类似数组的对象。
更新
如果您的意思是为什么您的第一段代码会将fakeArray
转换为['Addy']
而不是['Addy', 'Subtracty']
,那是因为length
的{{1}}仅为{{1} },应该是fakeArray
。
类似于数组的对象 - 具有1
属性且值2
索引
答案 1 :(得分:0)
我刚刚看到你的问题,在我看来你想要从顶部提供的对象中制作一个数组,如果你转到jsonlint.com你可以看到你的 javascript对象无效,可能就是这种情况。
试试这个:
var fakeArray = {"length": "1", "0": "Addy", "1": "Subtracty"};
// Therefore, convert it to a real array
var realArray = $.makeArray(fakeArray);
console.log(realArray);
此处您的对象键和值已引用""
双引号。
在这里测试:Demo @ Fiddle