操纵ajax响应

时间:2016-01-29 21:31:06

标签: javascript jquery arrays ajax object

我有一个ajax post方法。我从后端获得了一个对象

>Object{Info:Array[200]}
      >Info:Array[200]
                >[0-99]  
                      >0:Object
                          name:'Ashley'
                          on_pay: true
                          valid:"0"
                >[100-199]

当我做一个console.log(响应);在post方法中,我看到以下数据。

def delete
  @subject = Subject.find(params[:id]).delete
end

def destroy
  @subject = Subject.find(params[:id]).destroy
  redirect_to(:action=> 'index')
end

因此每个数组都有像上面提到的名称,on_pay和有效的对象。我想做以下事情 由于在我的情况下所有on_pay值都为真,我需要将其转换为false。同样有效的字符串为0.我需要将所有值设置为空白而不是0。

有可能做到吗?有人可以对这些有所了解。

2 个答案:

答案 0 :(得分:2)

考虑到您显示的JSON结构,以下内容应该可以更改on_pay值:

response.Info.forEach(function(item){
    item.on_pay = false;
});

答案 1 :(得分:1)

如果我正确理解您的问题,response是一系列项目。您希望保持这些项目不变,但将on_pay属性falsevalid变为空字符串。

您可以使用Array::map()转换每个项目。

/*jslint node:true*/

"use strict";

// I am assuming your response looks something like this
var response = {
    Info: [
        {
            name: "Ashley",
            on_pay: true,
            valid: "0"
        },
        {
            name: "Jim",
            on_pay: true,
            valid: "0"
        },
        {
            name: "John",
            on_pay: true,
            valid: "0"
        }
    ]
};

// This will produce a new variable that will hold the transformed Info array
var fixedResponseInfo = response.Info.map(function (item) {
    item.on_pay = false;
    item.valid = "";
    return item;
});

// This will edit the response.Info array in place
response.Info.forEach(function (item) {
    item.on_pay = false;
    item.valid = "";
});

console.log(fixedResponseInfo);
console.log(response);

这将保留原始响应变量并生成包含转换后数组的新变量fixedResponseInfo。如果您不关心response中的数据是否已更改,则可以使用Array::forEach()进行迭代。