【发布时间】:2011-04-04 03:25:49
【问题描述】:
在 Javascript 中,我有一个包含如下对象的数组:
var arr = [
{
value_1: 0,
value_2: 4,
encounter_bits: {
min_level: 8,
max_level: 12,
rarity: 20,
conditions: [1, 5]
}
},
{
value_1: 1,
value_2: 4,
encounter_bits: {
min_level: 5,
max_level: 5,
rarity: 20,
conditions: [2, 9]
}
},
{
value_1: 0,
value_2: 4,
encounter_bits: {
min_level: 8,
max_level: 12,
rarity: 5,
conditions: [1, 5]
}
},
];
我需要合并具有相同 min_level、max_level 和条件的对象。合并对象的稀有度将相加。我还需要保留数组顺序。
所以 arr[0] 和 arr[2] 会变成:
arr[0] = {
value_1: 0,
value_2: 4,
encounter_bits: {
min_level: 8,
max_level: 12,
rarity: 25,
conditions: [1, 5]
}
}
来自大致相同的数据集,这是在 Python 中完成的:
# Combine "level 3-4, 50%" and "level 3-4, 20%" into "level 3-4, 70%".
existing_encounter = filter(lambda enc: enc['min_level'] == encounter.min_level
and enc['max_level'] == encounter.max_level,
encounter_bits)
if existing_encounter:
existing_encounter[0]['rarity'] += encounter.slot.rarity
else:
encounter_bits.append({
'min_level': encounter.min_level,
'max_level': encounter.max_level,
'rarity': encounter.slot.rarity,
})
我知道我可能需要对 array.sort 和 array.splice 做一些事情,但我无法弄清楚。实现这一目标的最有效方法是什么?
【问题讨论】:
-
jQuery.merge() 有什么用?
-
我无法在这种环境下使用 jQuery。
-
您好,理查德,我认为您还没有找到解决您问题的方法(没有勾选答案),我已经编辑并测试了我的答案,它似乎有效 - 希望对您有所帮助。跨度>
标签: javascript arrays merge filter object