【问题标题】:jQuery map does not work with json arrayjQuery 地图不适用于 json 数组
【发布时间】:2015-07-11 19:44:29
【问题描述】:

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

这是 $.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;
})

在map函数之后,数组应该是这样的。

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

【问题讨论】:

    标签: javascript php jquery arrays json


    【解决方案1】:

    您正在执行的数组.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() 并将每个键值对推送到数组中。您可以根据需要在每次迭代中使用操作值。根据您的 cmets,假设您使用的由 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/

    【讨论】:

    • 我收到此错误。 TypeError: Cannot use 'in' operator to search for '2113' in 然后列出数组。
    • idHash 指的是什么?如果您将其替换为 console.log(item); ,则 .map() 有效。
    • .map() 需要使用 $ 的 jquery 对象或调用它,例如 $.map(array, function(){});。错误可能只是 item.set 代码行。
    • idHash = {'Alpha': '1', 'Beta': '2', 'Theta': '3', 'Omega': '4'};
    • idHash 应该更新这个数组中 set 键下的值。 [{"set":"Alpha","key":"256"}, {"set":"Omega","key":"671"}, {"set":"Theta","key":"762"}, {"set":"Beta","key":"462"}]
    【解决方案2】:

    .map() 的签名是:

    jQuery.map(数组,回调)

    所以,你可以试试这个:

    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

    【讨论】:

      猜你喜欢
      • 2011-03-22
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多