【问题标题】:javascript create a new array from json resultsjavascript 从 json 结果创建一个新数组
【发布时间】:2014-01-17 13:11:00
【问题描述】:

这可能是一个简单的解决方案,但我似乎无法让它工作:/ 我想从通过 json/api 调用收集的结果创建一个新的“响应”。

jsonResponse = [
     {"_id":"1","desc":"test desc","title":"Title 1"},
     {"_id":"2","title":"Title 2","desc":"desc 2"}
    ];

我需要从中创建一个看起来像这样的新数组;

var newResponse = [ 
  { "heading" : "Title 1", "summary" : "test desc"},
  { "heading" : "Title 2", "summary" : "desc 2"}

 ];

剥离 _id 并更改“密钥”。我该怎么做呢?

【问题讨论】:

    标签: javascript arrays for-loop


    【解决方案1】:

    Array.prototype.map 函数可以创造奇迹:

    var newResponse = jsonResponse.map(function(item){
      return { heading : item.title, summary : item.desc };
    });
    

    【讨论】:

    • 需要 ES5。这不适用于较旧的浏览器。如果这是一个问题。
    • @SaintGerbil 我在浏览器兼容性下给出的链接中对此进行了解释。还有一个 polyfill 可用于不实现 Array.prototype.map 的浏览器。
    • 控制台向我抛出一个:未捕获的 TypeError: Object [{"..."}] has no method 'map'(我正在开发(至少尝试)一个移动应用程序)。
    • @Tom 你能为我做一个console.log(Array.prototype.map)吗?
    • @Tom 那么问题是您的原始对象不是数组。如果您将更新问题以提供 jsonResponse 的确切形状,我很乐意给出正确答案。
    【解决方案2】:

    使用Array.prototype.map 是一个很好的解决方案,但如果你想支持旧版浏览器,你可以使用map polyfill,或者这样做:

    var newData = function () {
        var myArray = [];
        for (var i = 0; i < JSON.length; i++) {
            var self = JSON[i];
            myArray.push({
                heading: self.title,
                summary: self.desc
            });
        }
        return myArray;
    };
    
    // output
    newData();
    

    这是我的jsFiddle

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2014-01-16
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2013-06-11
      • 2011-12-26
      相关资源
      最近更新 更多