2015-07-11 106 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