gpt4 book ai didi

javascript - 在重新选择选择器中,如果对象键存在于另一个数组中,则使用带键对象增强对象

转载 作者:行者123 更新时间:2023-12-02 23:40:04 25 4
gpt4 key购买 nike

尝试学习一个概念。如果我有带键对象的对象和键数组。

const orders = {
"key1" : { id: "key1", number: "ORD001" },
"key3" : { id: "key3", number: "ORD003" },
"key2" : { id: "key2", number: "ORD002" },
};

和一个数组:

const selectedOrders = ["key1","key2"];

并在 Redux Reselect 的帮助下。我想要一个新对象,例如:

const orders = {
"key1" : { id: "key1", number: "ORD001" selected: true},
"key3" : { id: "key3", number: "ORD003" selected: false },
"key2" : { id: "key2", number: "ORD002" selected: true },
};

所以稍后我可以通过 Object.keys(this.orders) 迭代该对象并设置所选项目的样式。对于此类用例使用 Reselect 是否正确?如果是,那么我应该如何以有效且惯用的方式 checkin 外部数组是否包含给定的键?如果这个想法对于这样的用例来说是完全错误的,那么我应该如何以正确的方式做到这一点?附录:还可能有另一个数组,其中包含按顺序显示这些订单的键。 (用户可以重新订购商品)。附:我不想将对象数组用于 orders 集合。

最佳答案

是的,您可以使用重新选择来组合两组数据以生成第三组。由于reselect的内存功能,如果输入不改变,则只需要计算一次。

// You'll need some input selectors to pluck the raw orders from your redux store.
// I'm making these up, since i don't know how your store is arranged.
const getOrders = (state) => state.orders;
const getSelectedOrders = (state) => state.selectedOrders;

const getAugmentedOrders = createSelector(
[getOrders, getSelectedOrders],
(orders, selectedOrders) => {
const augmentedOrders = {};
Object.keys(orders).forEach(key => {
augmentedOrders[key] = {
...orders[key],
selected: selectedOrders.includes(key),
}
});
return augmentedOrders;
}
);

如果您有很多选定的订单,那么每次循环时执行 selectedOrders.includes 可能会出现性能问题。在这种情况下,我将创建一个 selectedOrders 集合,因为对该集合的查找将是恒定时间。

  (orders, selectedOrders) => {
const selectedSet = new Set(selectedOrders);
const augmentedOrders = {};
Object.keys(orders).forEach(key => {
augmentedOrders[key] = {
...orders[key],
selected: selectedSet.has(key),
}
});
return augmentedOrders;
}

关于javascript - 在重新选择选择器中,如果对象键存在于另一个数组中,则使用带键对象增强对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com