gpt4 book ai didi

javascript - 使用 Ramba、下划线或纯 Javascript 构建关联数组的最佳方法?

转载 作者:行者123 更新时间:2023-12-02 14:57:11 24 4
gpt4 key购买 nike

最近我发现自己在应用程序中越来越多地使用关联数组(或哈希表)(优点是查找速度、重复删除等)。

这是从我的应用程序中获取的典型代码 -

 var parent1 = { id: 5, name: 'parent 1'}, parent2  = { id: 10, name: 'parent 2'};
var children = [{id: 1, parent: parent1}, {id: 2, parent: parent1}, {id: 3, parent: parent1}, {id: 4, parent: parent2}]

var addToHash = function (hashObj, child) {
var parent = child.parent;
hashObj[parent.id] = parent;
return hashObj;
};

var uniqueParents = R.reduce(addToHash, {}, children);

目前我使用 Ramda reduce 函数。

问题 - 是否有更好(更简洁)的方法来使用 Ramda、另一个第 3 方库或简单地使用普通 Javascript 来实现此目的?

最佳答案

一种可能性:

R.pipe(
R.map(prop('parent')), //=> [parent1, parent1, parent1, parent2]
R.uniq, //=> [parent1, parent2]
R.map(parent => [parent.id, parent]), //=> [[5, parent1], [10, parent1]]
R.fromPairs //=> {5: parent1, 10: parent2}
)(children);
//=> {5: {id: 5, name: 'parent 1', 10: {id: 10, name: 'parent 2'}}}

请注意,如果您只想要 uniq 父级列表而不是 HashMap ,则可以在管道中的第二个函数之后停止。

另一个选项与您的类似,它只是将您的函数转换为返回新累加器而不是对其进行变异的函数:

var parentMap = R.reduce((acc, child) => R.assoc(child.parent.id, child.parent, acc), {});
parentMap(children); //=> {5: {id: 5, name: 'parent 1', 10: {id: 10, name: 'parent 2'}}}

关于javascript - 使用 Ramba、下划线或纯 Javascript 构建关联数组的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35704267/

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