【问题标题】:Find index of object by id in array of arrays在数组数组中按 id 查找对象的索引
【发布时间】:2019-05-28 19:52:29
【问题描述】:

我有一系列房子,里面有很多房间。

每个房间、房子和街道都有一个唯一的 ID(例如:如果房子 1 中的房间的 ID 为 1..4,那么房子 2 中的房间的 ID 为 5..9)

var street = {
    id = 1,
    streetname = 'stack street',
    houses = [
        {
            id: 1,
            type: 'brick'
            rooms: [
                {
                    id: 1,
                    color: 'blue'
                }, ... a bunch more
            ]
        }, ... a bunch more
    ]
}

是否有像 arr.findIndex() 这样的简单解决方案:
1) 给定一个房间 id,返回数组 house 中的房子索引,以及该房子数组 rooms 中房间的索引
2)给定一个房间ID,返回它所在的房子
3) 给定一个房间id,返回房间对象

【问题讨论】:

标签: javascript arrays json reactjs object


【解决方案1】:

1) findIndex() 是一个简单的解决方案,但您需要再次使用数组函数来扫描房屋检查回调中的房间:

var houseIndex = street.houses.findIndex(h => h.rooms.some(r => r.id === roomId));

2) 与find() 相同:

var house = street.houses.find(h => h.rooms.some(r => r.id === roomId));

或者如果之前的索引查找已经到位,使用它的结果:

var house = street.houses[houseIndex];

3) 将 house-room 层次结构扁平化为一个普通的房间列表并搜索所需的房间:

var room = street.houses.flatMap(h => h.rooms).find(r => r.id === roomId);

【讨论】:

    【解决方案2】:

    对于房间号 7:

    1)

    int houseIndex = street.houses.findIndex(house => house.rooms.find(room => room.id == 7));
    int roomIndex = street.houses.find(house => house.rooms.find(room => room.id == 7)).rooms.findIndex(room => room.id == 7)
    

    2)

    var houseObject = street.houses.find(house => house.rooms.find(room => room.id == 7))  
    

    3)

    var roomObject = street.houses.find(house => house.rooms.find(room => room.id == 7)).rooms.find(room => room.id == 7)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多