Javascript 使用非唯一“键”匹配数组中的对象

Javascript 使用非唯一“键”匹配数组中的对象,javascript,arrays,Javascript,Arrays,我试图使用出现在两个数组中的键来匹配一些值。键不是唯一的,可以在每个数组中出现多次。我想根据集合数组中出现的顺序对它们进行匹配。以下是我现在的处境: var master=[{name:'title1',value:1},{name:'title1',value:2},{name:'title2',value:10},{name:'title3',value:11}]; 变量集=[{titles:['title1','title2'],索引:1},{titles:['title1','titl

我试图使用出现在两个数组中的键来匹配一些值。键不是唯一的,可以在每个数组中出现多次。我想根据集合数组中出现的顺序对它们进行匹配。以下是我现在的处境:

var master=[{name:'title1',value:1},{name:'title1',value:2},{name:'title2',value:10},{name:'title3',value:11}]; 变量集=[{titles:['title1','title2'],索引:1},{titles:['title1','title3'],索引:2}]; 对于var x=0;x<长度;x++{ 变量集=集合[x]; 对于变量i=0;i*/ 若大师真的很长,你们应该只看一次大师,每一次都要看一组

var master = [{name: 'title1', value: 1}, {name: 'title1', value: 2}, {name: 'title2', value: 10}, {name: 'title3', value: 11}];

var sets = [{titles: ['title1', 'title2'], index: 1}, {titles: ['title1', 'title3'], index: 2}];


for (var x = 0; x < master.length; x++) {
    var value = master[x];
    var sets_in = sets.filter(function(o){return o.titles.indexOf(value.name) !== -1;})
    for (var i = 0; i < sets_in.length; i++) {
        console.log("set: " + sets_in[i].index + " title: " + value.name + " value: " + value.value);
    }
}
小提琴:


这就是你要找的吗?订单上有人嘀咕吗?

这就是我想到的。我真的不想和字典打交道。不过,我需要对这两种解决方案进行基准测试,看看它们对性能有何影响(如果有的话)

var master=[{name:'title1',value:1},{name:'title1',value:2},{name:'title2',value:10},{name:'title3',value:11}]; 变量集=[{titles:['title1','title2'],索引:1},{titles:['title1','title3'],索引:2}]; 对于var x=0;x<长度;x++{ 变量集=集合[x]; 对于变量i=0;i}为什么不把你的主数组转换成一个没有名字的字典呢?类似于:{title1:[1,2],title2:[10],title3:[11]}并在使用数组时从数组中移除项目。是的,我已经想到了,但是主数组在生产中会变得相当大,我正在寻找一个更优雅的解决方案。因为我将不得不多次运行转换代码。主数组用于代码的其他部分。想知道是否有更简洁的方法来实现它。但是主数组在生产中会变得相当大,您认为搜索整个数组以匹配键是更好的解决方案吗?这取决于您需要访问的频率,但可能值得一次转换以更快地查找。您是否构建了集合数组?如果是这样,标题可以是直接引用master中对象的对象列表,而不是字符串列表。@MatthewGraves:filter函数将搜索整个数组,以查看哪些项符合您的条件。正在播放。从字典中获取值应该是O1,但将数组转换为字典的成本显然更高。因此,问题在于您可能需要进行多少次查找,以及转换数组所需的时间。顺序很重要,而且您的解决方案似乎会创建额外的迭代。我们应该只让迭代次数等于集合中标题数组的总和。在我的例子中,它是4。您的代码生成12个控制台日志。对不起,我理解错了。这把小提琴更准确吗?