2015-07-11 105 views
1

我有一个调用php文件的$ .post jQuery调用。该文件然后返回一个JSON编码数组。然后,数组映射到编辑数组中的一些数据。但是,我收到错误arr.map is not functionjQuery地图不适用于json数组

这是在$ .post调用中传递的数组。

[{"set":"Alpha","key":"256"}, 
{"set":"Omega","key":"671"}, 
{"set":"Theta","key":"762"}, 
{"set":"Beta","key":"462"}] 

这是地图功能。

idHash = {'Alpha': '1', 'Beta': '2', 'Theta': '3', 'Omega': '4'}; 
var arr = arr.map(function(item){ 
    item.set = idHash[item.set] 
    return item; 
}) 

在映射函数之后,数组应该看起来像这样。

[{"set":"1","key":"256"}, 
{"set":"4","key":"671"}, 
{"set":"3","key":"762"}, 
{"set":"2","key":"462"}] 

回答

7

您正在执行.map()将需要一个jQuery对象数组。如果您将结果数据设置为等于jQuery数组并附上$,您应该可以使用jquery map实用程序。您还可以使用$.map(array, function(item){});

https://jsfiddle.net/62v2a0cw/1/

idHash = {'Alpha': '1', 'Beta': '2', 'Theta': '3', 'Omega': '4'}; 

var arr = $.map(idHash, function(item){ 
    item.set = idHash[item.set]; 
    console.log(item); 
    return item; 
}); 

请参阅的jsfiddle链接。让我知道这是否有帮助。这只是协助.map()。如果你想创建一个JSON对象数组,你可以使用jQuery .each(),并将每个键值对相应地推送到一个数组中。您可以根据需要使用每次迭代中的值。根据您的意见,通过idHash假设你与鉴定工作的JSON等于{'Alpha': '1', 'Beta': '2', 'Theta': '3', 'Omega': '4'}

arr = []; 
idHash = {'Alpha': '1', 'Beta': '2', 'Theta': '3', 'Omega': '4'}; 

$.each(idHash, function(key, value){ 
    // do whatever with the value before setting 
    value *= 15; 
    arr.push({"set": key, "key": value }); 
});  
console.log(arr); 

https://jsfiddle.net/62v2a0cw/2/

让我知道是否可行。

+0

我得到这个错误。 TypeError:不能使用'in'运算符来搜索''中的'2113',然后列出数组。 – ChrisRockGM

+0

什么是idHash指的是什么?如果用'console.log(item)替换它,'.map()可以工作。 –

+0

'.map()'需要使用$的jquery对象或调用它,比如'$ .map(array,function(){});'。该错误可能与'item.set'代码行一样。 –

0

.map()签名是:

jQuery.map(array, callback)

所以,你可以试试这个:

var data = [{"set":"Alpha","key":"256"}, 
{"set":"Omega","key":"671"}, 
{"set":"Theta","key":"762"}, 
{"set":"Beta","key":"462"}]; 

$.map(data, function(elem){ 
    elem.set = newValue; 
    elem.key = newValue; 
}); 

下面是fiddle