我是新来使用JSON进行响应的,我需要process(iterate)
来响应JSON原型,下面给出了一些JSON数据,“我要管理属于不同类别的每个房间号”,使用地图功能实现
请帮助我解决问题。 “对不起我的英语不好,英语不是我的母语。
let data = {
"category": {
"king": [{
"id": 1,
"room_no": 101,
"price": 2000
},
{
"id": 2,
"room_no": 102,
"price": 3000
}
],
"queen": [{
"id": 1,
"room_no": 101,
"price": 2000
},
{
"id": 2,
"room_no": 102,
"price": 3000
}
]
}
}
答案 0 :(得分:0)
似乎您想像遍历数组一样遍历对象,但是您不知道该怎么做。
查看javascript的Object.keys(),Object.values()或Object.entries()。
例如Object.keys({ foo: 1, bar: 2 })
<=> ['foo', 'bar']
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/keys
Object.values({ foo: 1, bar: 2 })
<=> [1, 2]
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/values
Object.entries({ foo: 1, bar: 2 })
<=> [['foo', 1],['bar', 2]]
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/entries
所以对您来说,映射对象的方法是:
Object.keys(data.category).map(function(categoryName) {
var category = data.category[categoryName];
category.map(function(bed) {
console.log(
'Category: , ', categoryName,
' / Bed: ', bed.id,
' / Room number: ', bed.room_no
);
});
});
Working fiddle here (remember to open the console to see the result)
答案 1 :(得分:0)
您实际上不能单独使用map来执行此操作。至少,这与通常使用standard-class
的方式相反。
您可以使用多个Scoring = ((dynamic)e).Scoring is DBNull ? null : (double)(((dynamic)e).Scoring),
TrustCoefficient = (dynamic)e).TrustCoefficient is DBNull ? null : (double)(((dynamic)e).TrustCoefficient),
步骤将对象转换为嵌套列表(在这种情况下为对象列表列表)。但您还需要将map
的结果展平到数字列表中。看到这里:
map
首先,有三个嵌套的map
步骤。前两个使用let data = {
"category": {
"king": [{
"id": 1,
"room_no": 101,
"price": 2000
},
{
"id": 2,
"room_no": 102,
"price": 3000
}
],
"queen": [{
"id": 1,
"room_no": 101,
"price": 2000
},
{
"id": 2,
"room_no": 102,
"price": 3000
}
]
}
};
const room_nos = Object.values(data)
.map(entry =>
Object.values(entry)
.map(category =>
category.map(room => room.room_no)))
.reduce((result, array) => result.concat(array), [])
.reduce((result, array) => result.concat(array), []);
console.log(room_nos);
将对象转换为它们的值列表(一个用于map
,一个用于Object.values
)。这为您提供了房间描述符列表的列表列表(即具有data
,category
和id
属性的对象)。在第三步room_no
中,将房间描述符投影到price
属性上,以获得数字列表的列表。
第二,我们使用两个map
步骤将数字列表的列表扁平化为数字列表。
输出:
room_no
更新:您可以将内部列表转换为类型为reduce
的元素列表,如下所示:
[
101,
102,
101,
102
]
输出:
{ [category: string]: number }
答案 2 :(得分:0)
用于安慰 room_no :
[].concat.apply([], Object.values(data["category"])).map(i => console.log(i.room_no))
输出:
101
102
101
102
Object.values(data["category"])
以嵌套数组格式给出国王和王后类别的值,[].concat.apply([], [nested_array])
将其展平为应用了Array.prototype.map()
的单级数组
用于格式化结果,例如 category:room_no :
for(key in data["category"]){
data["category"][key].map(i => console.log(`${key} : ${i.room_no}`))
}
输出:
king : 101
king : 102
queen : 101
queen : 102
此处在data["category"]
上循环并应用了Array.prototype.map()
。