gpt4 book ai didi

javascript - 在对象数组中查找具有更大键的元素

转载 作者:行者123 更新时间:2023-12-03 01:31:20 24 4
gpt4 key购买 nike

我正在编写一个小型响应式(Reactive)框架,我需要找出哪个订阅者需要更新。我正在实现深度绑定(bind),但在如何有效地找到订阅者方面遇到了困难。

存储的变量可以是一个对象,例如

{
"user": {
"preferences": {
"food": "vegetarian"
}
}
}

您可以像这样获取此变量的任何级别的内容

getVar("user_preferences_food");
getVar("user_preferences");

但是,您也可以这样更新

setVar("user_preferences_food", "meat");
setVar("user_preferences", {"food": "meat"});

但是如果是第一个 setVar (user_preferences_food),我如何使用 getVar("user_preferences"); 甚至 getVar("user "); 最有效。

我已经通过在 _ 上拆分 var 来使其工作,然后逐一连接下一个级别并合并所有结果数组。但这非常耗费资源。特别是如果有很多订阅者。必须有一种更好的方法来找到它们,并且资源消耗较少。

编辑:我省略了部分解释。

还有订阅方法

subscribe("user", cb);
subscribe("user_preferences", cb);
subscribe("user_preferences_food", cb);

这些订阅存储在框架中的数组中。

例如,一旦“user_preferences_food”更新,上面的所有订阅都应该被触发。但显然不是 subscribe('othervar');

订阅方法的简化:

var subscriptions = [];
function subscribe(var, callback){
subscriptions.push({var: var, cb: callback});
}

简化getVar

vars = {};
getVar(var){
// find var in vars with this logic: https://stackoverflow.com/a/18937118/249710

// current exact match on subscribers, but need the "parents, grandparents etc here
var toUpdate = _.where(subscriptions, {
"var" : var
});
_.each(toUpdate, function(sub){ sub.cb();});
}

存储或获取数据作为我已经介绍过的 key 的一部分。只是以最有效的方式找到订阅者

ps:这是在一个我还不能依赖 ES6 的环境中(并非所有用户都启用它),没有 DOM,但我确实包含下划线。 (钛金应用开发平台)

最佳答案

我会尝试为回调创建一个列表,这样您就可以循环遍历一个列表,这样您就不必进行搜索,因为您知道该列表包含所有回调。

因此,如果您调用 setVar('user_prefs'),您将使用根变量设置一个单独的列表。在这种情况下是用户。

如果使用 setVar 更改了任何对象(无论是否深入),您都会转到根变量,获取列表并使用回调循环遍历此列表。

这样做的好处是你可以使用根变量设置一个列表,var cbList[FIRSTVAR] 这包含所有回调。没有搜索只是循环。

这是 mongoDb 的原理,数据已经准备好了,你不需要搜索,因为你知道列表已经在那里。

关于javascript - 在对象数组中查找具有更大键的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51282402/

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