我有一个对象,我想遍历它的所有子对象/键,这些子对象/键包含键-值对“pool”:“奢侈品”。或者换句话说,我想迭代掉所有在豪华池中的房间来设置一个新的参数。在js中,什么是正确和有效的方法呢?
var rooms = {
SU01: {
enabled: true,
pool: "comfort",
ics_lnk : "https://avlblty.com/su01.ics",
ics_txt : "",
},
SU02: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su02.ics",
ics_txt : "",
},
SU03: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su03.ics",
ics_txt : "",
},
SU11: {
enabled: true,
pool: "comfort",
ics_lnk : "https://avlblty.com/su11.ics",
ics_txt : "",
},
SU12: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su12.ics",
ics_txt : "",
},
...发布于 2017-07-16 16:57:34
您可以使用Object.values()获取对象中的所有值,使用filter只保留您想要的值。
代码可能如下所示:
foreach (let room of Object.values(rooms).filter(r => r.pool == 'luxury')) {
// Do something with room
}发布于 2017-07-16 17:58:23
假设这是您的数据集
const data = var rooms = {
SU01: {
enabled: true,
pool: "comfort",
ics_lnk : "https://avlblty.com/su01.ics",
ics_txt : "",
},
SU02: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su02.ics",
ics_txt : "",
},
SU03: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su03.ics",
ics_txt : "",
},
SU11: {
enabled: true,
pool: "comfort",
ics_lnk : "https://avlblty.com/su11.ics",
ics_txt : "",
},
SU12: {
enabled: true,
pool: "luxury",
ics_lnk : "https://avlblty.com/su12.ics",
ics_txt : "",
},
};如果返回房间的属性很重要,我们需要将这些属性添加到房间对象中,如下所示
const rooms = Object.keys(data).map(id => ({
id,
...data[key],
}));否则,我们可以通过简单地调用
const rooms = Object.values(data);现在我们有了房间,我们必须过滤pool等于luxury的房间
const luxuryRooms = rooms.filter(room => room.pool === 'luxury');最后,您可以使用以下命令添加新属性
const updatedRooms = luxuryRooms.map(room => ({
...room,
newProperty: 'New Value',
}));发布于 2017-07-16 18:12:12
使用lodash
var _ = require('lodash')
_(rooms)
.values()
.filter(r => r.pool == poolName)
.value()输出:
[ { enabled: true,
pool: 'luxury',
ics_lnk: 'https://avlblty.com/su02.ics',
ics_txt: '' },
{ enabled: true,
pool: 'luxury',
ics_lnk: 'https://avlblty.com/su03.ics',
ics_txt: '' },
{ enabled: true,
pool: 'luxury',
ics_lnk: 'https://avlblty.com/su12.ics',
ics_txt: '' } ]https://stackoverflow.com/questions/45126745
复制相似问题