首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JS中为具有特定参数/值的子对象添加属性?

如何在JS中为具有特定参数/值的子对象添加属性?
EN

Stack Overflow用户
提问于 2017-07-16 16:51:51
回答 5查看 95关注 0票数 0

我有一个对象,我想遍历它的所有子对象/键,这些子对象/键包含键-值对“pool”:“奢侈品”。或者换句话说,我想迭代掉所有在豪华池中的房间来设置一个新的参数。在js中,什么是正确和有效的方法呢?

代码语言:javascript
复制
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 : "",
    },
    ...
EN

回答 5

Stack Overflow用户

发布于 2017-07-16 16:57:34

您可以使用Object.values()获取对象中的所有值,使用filter只保留您想要的值。

代码可能如下所示:

代码语言:javascript
复制
foreach (let room of Object.values(rooms).filter(r => r.pool == 'luxury')) {
    // Do something with room
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-16 17:58:23

假设这是您的数据集

代码语言:javascript
复制
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 : "",
    },
};

如果返回房间的属性很重要,我们需要将这些属性添加到房间对象中,如下所示

代码语言:javascript
复制
const rooms = Object.keys(data).map(id => ({
  id,
  ...data[key],
}));

否则,我们可以通过简单地调用

代码语言:javascript
复制
const rooms = Object.values(data);

现在我们有了房间,我们必须过滤pool等于luxury的房间

代码语言:javascript
复制
const luxuryRooms = rooms.filter(room => room.pool === 'luxury');

最后,您可以使用以下命令添加新属性

代码语言:javascript
复制
const updatedRooms = luxuryRooms.map(room => ({
  ...room,
  newProperty: 'New Value',
}));
票数 1
EN

Stack Overflow用户

发布于 2017-07-16 18:12:12

使用lodash

代码语言:javascript
复制
var _ = require('lodash')

_(rooms)
    .values()
    .filter(r => r.pool == poolName)
    .value()

输出:

代码语言:javascript
复制
[ { 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: '' } ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45126745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档