我试图使用出现在两个数组中的键来匹配一些值。键不是唯一的,可以在每个数组中出现多次。我想根据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];
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
*/
&#13;
所以,基本上我需要变量&#34; real_index&#34;对应于主数组中的对象,但只使用每个主数组对象一次。假设主数组是不可变的。
我试图使real_index = 0,但这使得它每次(明确地)返回第一个元素。我尝试过make_index = x - 1,但这并不适用于title3。有点难过。
其他细节: - 在sets数组中,标题可以出现在多个集合中,但它们可能不会出现在任何一个集合中。 - 在生产中,主数组将非常大,并且将被多次使用,因此假设复制/转换它将无法合理地完成。
答案 0 :(得分:0)
如果主人真的很长,你应该只通过主人一次,并且每个人都要看看。
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);
}
}
小提琴:https://jsfiddle.net/rgtdbo40/
这是你在找什么?订单是否在嘀咕?
答案 1 :(得分:0)
这就是我想出来的。我真的不想处理字典。我需要对这两种解决方案进行基准测试,看看有什么性能影响。
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];
for (var i = 0; i < set.titles.length; i++) {
var title = set.titles[i];
var real_index = sets.filter(function(o){return o.titles.indexOf(title) != -1;}).map(function(o){return o.index;}).indexOf(set.index);
var value = master.filter(function(o){return o.name == title;})[real_index]
console.log("set: " + set.index + " title: " + title + " value: " + value.value);
};
}
&#13;