使用jquery.map()进行动态映射

时间:2014-05-02 14:25:35

标签: javascript jquery json mapping

我有一系列的ajax json响应,我需要转换为常见的数组类型。问题是每个json响应都略有不同。

以下是我可能收到的两个回复示例:

var contacts = [{ "ContactId" : "1", "ContactName" : "Bob" },{ "ContactId" : "2", "ContactName" : "Ted" }];
var sites = [{ "SiteId" : "1", "Location" : "MN" },{ "SiteId" : "2", "Location" : "FL" }];

我试图编写一个将集合转换为普通类型的方法。转换的上述响应的示例如下所示:

var convertedContacts = [{ "value" : "1", "text" : "Bob" },{ "value" : "2", "text" : "Ted" }];
var convertedSites = [{ "value" : "1", "text" : "MN" },{ "value" : "2", "text" : "FL" }];

所以我试图使用jquery的map函数来促进这个要求。虽然我似乎无法弄清楚如何根据我传入函数的json集合动态查询将存在的不同属性值。

以下是我尝试做的一个例子:

function ConvertResponse(arrayToConvert, text, value)
{
    var a = $.map(arrayToConvert, function(m) { 
        return "{ \"text\" : "+eval("m."+text)+", \"value\" : "+eval("m."+value)+" }"
    });
}

我也试过这个:

function ConvertResponse(arrayToConvert, text, value)
{
    var a = $.map(arrayToConvert, function(m) { 
        return "{ \"text\" : " + m.$(text) + ", \"value\" : " + m.$(value) + " }";
    });
}

这就是你怎么称呼它:

var convertedContacts = ConvertResponse(contacts, "ContactName", "ContactId");
var convertedSites = ConvertResponse(contacts, "Location", "SiteId");

不幸的是,这似乎不起作用。

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

var contacts = [{ "ContactId" : "1", "ContactName" : "Bob" },{ "ContactId" : "2", "ContactName" : "Ted" }];
var sites = [{ "SiteId" : "1", "Location" : "MN" },{ "SiteId" : "2", "Location" : "FL" }];

function convertResponse(response, text, value) {
  return $.map(response, function(it) {
    return {
      value: it[value],
      text: it[text]
    };
  });
}

var convertedContacts = convertResponse(contacts, 'ContactId', 'ContactName');
var convertedSites = convertResponse(sites, 'SiteId', 'Location');