这就是API响应的样子。
{
"keys": ["CustomerId", "Name", "Gender"],
"value": [["1", "Ram", "Male"]]
}
Angular VM
function Customer(){
return this.Customer = {
"CustId": "",
"Name": "",
"Gender": "",
}
}
Angular AJAX Call。
$http.get(url)
.then(function(data)){
var cust = new Customer();
//for now I am doing this way.
cust.Id = data.value[0][0];
cust.Name = data.value[0][1];
cust.Gender = data.value[0][1];
}
我不想按索引映射属性。
这些API不在我的掌控之中
有没有办法,我可以按键(响应)映射属性,如下所示。
cust.Id = data.value[0]["CustomerId"];
cust.Name = data.value[0]["Name"];
cust.Gender = data.value[0]["Gender"];
任何帮助/建议都非常感谢。
答案 0 :(得分:2)
我能看到实现这样的事情的唯一方法是找到每个键的索引,并在访问你的值时使用它作为索引:
$http.get(url)
.then(function(data){
var cust = new Customer();
cust.Id = data.value[0][data.keys.indexOf('CustomerId')];
cust.Name = data.value[0][data.keys.indexOf('Name')];
cust.Gender = data.value[0][data.keys.indexOf('Gender')];
});
但是请注意,这只有在键和值匹配时才有效...我认为它们会匹配。
答案 1 :(得分:1)
如果你能够使用ES6,那么最好的解决方法(对于这个制作简单的API)就是创建一个像这样的解析器函数:
function parseResponse(response) {
const {keys, value: objects} = response;
return objects.map(object => {
const parsedValue = {};
keys.forEach((key, index) => {
parsedValue[key] = object[index];
});
return parsedValue;
});
}
试验:
const response = {
"keys": ["CustomerId", "Name", "Gender"],
"value": [["1", "Ram", "Male"]]
};
parseResponse(response); // Outputs [{CustomerId: "1", Name: "Ram", Gender: "Male"}]
如果你愿意,我可以用ES5做到这一点。只要说出这个词:)
修改强>
ES5版本:
function parseResponse(response) {
var keys = response.keys;
var objects = response.value;
var response = [];
for (let i = 0; i < objects.length; i++) {
var formattedValue = {};
for (let j = 0; j < keys.length; j++) {
var key = keys[j];
formattedValue[key] = objects[i][j];
}
response.push(formattedValue);
}
return response;
}