gpt4 book ai didi

javascript - 如何基于 Javascript 中的两个键构造查找

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:09 26 4
gpt4 key购买 nike

我有超过一万个对象,它们表示有关两个 ids 的一些信息,如下所示:

muchData = [
{
ids: ["123", "234"],
interestingData: 1
},
{
ids: ["123", "345"],
interestingData: 2
},
...
];

我目前正在使用 lodash 查找与两个 ids 匹配的一个对象,例如:

function findData(id1, id2) {
return _.filter(muchData, function(d) {
return d.ids.indexOf(id1) > -1 && d.ids.indexOf(id2) > -1
})
}

如果不能保证我将收到 id1 和 id2 的顺序(即 ids 数组中的第一个值可以是 id1 或 id2)。

是否有更好的方法来表示此问题以避免每次查找都必须过滤整个 muchData 数组?

最佳答案

最初是一个(冗长的)评论,稍微扩展成一个答案。

鉴于数组的性质:

muchData = [
{
ids: ["123", "234"],
interestingData: 1
},
{
ids: ["123", "345"],
interestingData: 2
},
...
];

如果,如你所说your comment to the question :

The ids are guaranteed to be unique.

那么最简单的方法就是使用组合的 id 属性值作为数组的索引:

var sortedData = [],
muchData.forEach(function (obj, index, array) {
sortedData[ parseInt( obj.id.join(''), 10) ] = obj.interestingData;
});

然后使用创建的数组搜索您希望检索的 interestingData。这样做的好处是它只需要发生一次(每次客户访问),当然,这也可以在服务器端完成(一次)以使其更容易。

或者,您可以将数组转换为对象并使用组合的 id 属性作为键,而不是数组(这可能比创建一个可能包含大量空数组的数组更明智/未定义条目):

muchData = [
{
ids: ["123", "234"],
interestingData: 1
},
{
ids: ["123", "345"],
interestingData: 2
},
...
],
objOfData = {},
muchData.forEach(function (obj, index, array) {
objOfData[ obj.id.join('') ] = obj;
});

关于javascript - 如何基于 Javascript 中的两个键构造查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114957/

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