如何使用对象和嵌套数组过滤数组
问题描述:
我想让数组(从)变成像(到)。为了在相同排列值不包括“qtty”我用:如何使用对象和嵌套数组过滤数组
_.isEqual(_.omit(val, 'qtty'), _.omit(value2, 'qtty'))
从http://underscorejs.org/#isEqual它给了正确的结果,但我没能得到证明波纹管的最终结果。
From =
0 {itemId: "121", qtty: 1, subitem: [], combo: [{comboId: 201, setId: 29}, {comboId: 201, setId: 28}], addon: []}
1 {itemId: "121", qtty: 1, subitem: [], combo: [{comboId: 201, setId: 29}, {comboId: 201, setId: 28}], addon: []}
2 {itemId: "121", qtty: 1, subitem: [{subitemId: 72, state: 1}], combo: [{comboId: 201, setId: 29}, {comboId: 201, setId: 28}], addon: []}
3 {itemId: "141", qtty: 1, subitem: [], combo: [{comboId: 201, setId: 26}], addon: []}
4 {itemId: "347", qtty: 1, subitem: [], combo: [], addon: []}
5 {itemId: "347", qtty: 1, subitem: [], combo: [], addon: []}
To =
0 {itemId: "121", qtty: 2, subitem: [], combo: [{comboId: 201, setId: 29}, {comboId: 201, setId: 28}], addon: []}
1 {itemId: "121", qtty: 1, subitem: [{subitemId: 72, state: 1}], combo: [{comboId: 201, setId: 29}, {comboId: 201, setId: 28}], addon: []}
2 {itemId: "141", qtty: 1, subitem: [], combo: [{comboId: 201, setId: 26}], addon: []}
3 {itemId: "347", qtty: 2, subitem: [], combo: [], addon: []}
答
我找到了答案here感谢响螺兔子谁张贴的答案,但它需要一个小调整,使其以更加多维数组像我的情况下工作。
function unify(orderData) {
var groups = _.groupBy(orderData, function (value) {
return value.itemId + '#' + _.map(value.subitem, function (subitemValue) { return subitemValue.subitemId + '#' + subitemValue.state ; }) + '#' + _.map(value.addon, function (addonValue) { return addonValue.addonId + '#' + addonValue.state; }) + '#' + _.map(value.combo, function (comboValue) { return comboValue.comboId + '#' + comboValue.setId; }) ;
});
var data = _.map(groups, function (group) {
return {
itemId: group[0].itemId,
subitem: group[0].subitem,
addon: group[0].addon,
combo: group[0].combo,
qtty: _.reduce(_.pluck(group, 'qtty'), function (memo, num) {
return memo + num;
}, 0)
}
});
return data;
}
这里的主要区别是映射_.map()
通过每个子阵列,以便能够按一种复杂多维数组。