我正在尝试使用出现在两个数组中的键来匹配一些值。这些键不是唯一的,并且可以在每个阵列中出现多次。我想根据sets数组中出现的顺序来匹配它们。下面是我在哪里,在现在:使用非唯一的“键”匹配数组中的对象
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 < sets.length; x++) {
var set = sets[x];
\t for (var i = 0; i < set.titles.length; i++) {
var title = set.titles[i];
var real_index =
var value = master.filter(function(o){return o.name == title;})[real_index]
console.log("set: " + set.index + " title: " + title + " value: " + value.value);
};
}
/*
looking for console output to be:
set: 1 title: title1 value: 1
set: 1 title: title2 value: 10
set: 2 title: title1 value: 2
set: 2 title: title3 value: 11
*/
所以,基本上我需要的变量“real_index”对应于主数组中的对象,但只能使用每个主数组对象一次。假定主数组是不可变的。
我试图让real_index = 0,但这使得它每次(清楚地)返回第一个元素。例如,我试图让real_index = x - 1,但对于title3不起作用。有点难倒。
其他详细信息: - 在sets数组中,标题可以出现在多个集合中,但它们可能不会出现在任何单个集合中多次。 - 在生产中,主数组将非常大,并且将被多次使用,因此假定复制/转换它不会被合理地完成。
为什么不只是改变你的'master'的数组键关闭'name'字典?例如:{{title1:[1,2],title2:[10],title3:[11]}',并在您使用它们时从数组中移除项目。 –
是的,我想到了这一点,但主阵列在制作中会变得非常大,我正在寻找更优雅的解决方案。因为我将不得不多次运行转换代码。 (主数组用于代码的其他部分)。想知道是否有更简洁的做法。 –
'但master数组在生产中会变得非常大,并且您认为搜索整个数组以匹配键是更好的解决方案吗?这取决于你需要访问的频率是多少,但是为了更快速的查找,一次转换的成本可能是值得的。 –