【问题标题】:Jquery Object (Ajax-response) to Array of Keys and ValuesJquery 对象(Ajax 响应)到键和值数组
【发布时间】:2017-07-01 14:57:57
【问题描述】:

在我发送 $.ajax 请求后,我收到如下响应:

(不要害怕俄罗斯符号,它们只是文本字符串:))

其实我知道php发送请求的时候,是一个简单的数组,比如:

0 => array(2) ('hotel'=>'Отельчик', city_from => 'Москва'),
1 => array(6) ('birth_date'=>"2999-01-01", 'doc_fullnumber'=> '1', 'is_buyer'=>'0', 'is_tourist'=>'0', 'lastName'=>'Имя', name => 'Имя')

等等……

对我来说,在 JS 中处理数组而不是对象似乎要容易得多。 任何人都可以就如何将这个对象变成简单的数组提出建议,而无需所有那些 '_ proto _: Object ' 和所有其他 Jquery 特定的东西?

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    我认为你需要这个

    var finalArray = [];
    for(var index in response){
        toPush = [];
        for(var key in response[index]{
            toPush.push(response[index][key]);
        }
        finalArray.push(toPush);
    }
    

    这会将您的响应重新映射到数组数组中。希望我理解正确。甚至我必须说处理对象比数组更方便。

    【讨论】:

    • 谢谢,弗兰克。它输出:joxi.ru/MAj0z5yI4Ovxam 它仍然有所有那些 proto:Array(0) 和东西。还是这是正常的 Jquery 行为?如果是这样,我会结束这个问题。而且可能操作对象比较容易,我是新手:)
    • 这是正常现象!
    • Protos 是可用于某些类型的实体的函数...例如,当您有 var pippo = [1] 时,您可以从数组本身调用一些函数pippo.push(2)...同样的事情对象,字符串..ecc...
    【解决方案2】:

    嘿,你可以做一个简单的把戏。

    当你从你的 PHP 发送数据时,这样做:

    $data_to_send = array("这将有你的数据");

    回显 json_decode(json_encode($data_to_send),true);

    这会将您的对象转换为数组,您也可以像在 JavaScript 中那样使用它。

    【讨论】:

    • 是的... @SergejFomin 您可以接受我的答案作为最佳答案。 (那个绿色勾号)。
    • 谢谢!会使用您和其他人的方法,然后选择最佳答案:)
    【解决方案3】:

    来自Object.prototype.proto

    Object.prototype__proto__ 属性是访问器属性(a getter 函数和 setter 函数)公开内部 [[Prototype]](对象或 null)通过它的对象 它被访问了。

    警告:根据现代 JavaScript 引擎优化属性访问的本质,更改对象的 [[Prototype]] 在每个浏览器和 JavaScript 引擎中运行缓慢。对的影响 改变继承的表现是微妙而广泛的,并且是 不仅限于在obj.__proto__ = ... 语句中花费的时间, 但可以扩展到可以访问任何对象的任何代码 [[Prototype]] 已更改。如果你关心性能,你 应避免设置对象的[[Prototype]]。相反,创建一个 具有所需 [[Prototype]] 的新对象,使用 Object.create()

    您已经有一个对象数组。您可以通过这种方式遍历对象数组:

    var data = [{
      "hotel": "Гостиница",
      "city_from": "Mockba"
    }, {
      "birth_date": "2999-01-01",
      "doc_fullnumber": 1,
      "is_buyer": 0,
      "is_tourist": 0,
      "lastName": "LastName1",
      "name": "Name1"
    }, {
      "birth_date": "2999-01-02",
      "doc_fullnumber": 1,
      "is_buyer": 0,
      "is_tourist": 0,
      "lastName": "LastName2",
      "name": "Name2"
    }, {
      "birth_date": "2999-01-01",
      "doc_fullnumber": 1,
      "is_buyer": 0,
      "is_tourist": 0,
      "lastName": "LastName3",
      "name": "Name3"
    }];
    
    function showData(data) {
      console.log(data);
      var i, len = data.length, html = "<ul>", obj;
      for (i = 0; i < len; i++) {
        obj = data[i];
        html += "<li>";
        html += obj.name !== undefined ? obj.name : "";
        html += " ";
        html += obj.lastName !== undefined ? obj.lastName : "";
        html += "</li>";
      }
      html += "</ul>";
      return html;
    }
    document.getElementById("data").innerHTML = showData(data);
    &lt;div id="data"&gt;&lt;/div&gt;

    记住:MDN - Details of the object model

    JavaScript 是一种基于 原型 的基于对象的语言,而不是 而不是基于类。由于这个不同的基础,它可以是 JavaScript 如何允许您创建层次结构的不太明显 对象并继承属性及其值。

    【讨论】:

    • 谢谢你,伙计!:) 看来你懂俄语? :) 是的,主要是如何处理它。我会使用您的方法和其他方法,然后选择最佳答案:)
    • 不客气,伙计。如果您需要更多帮助,请告诉我。 Удачи! :)
    • 嗨,丹尼!实际上,您的回答对我帮助最大。但是我选择了另一个答案来更好地计算主题中的实际问题。抱歉:) 再次感谢您!
    • :) 也许你也可以帮助我:stackoverflow.com/questions/44886845/…
    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多