我有一个包含对象的数组。我计算对象值。 该脚本正在运行。是否可以缩短(DRY)?
var myData = [
{ sku: "9017WKs43dp", quan: 100, farbigkeit40: "A90ZUKOs4599", proof: "A90ZUKOs4499" },
{ sku: "9017WKs18dp", quan: 100 },
{ sku: "9017WAs18dp", quan: 50, eindruck: "A90ZUKOs4799" },
{ sku: "9017WAs18dp", quan: 40, eindruck: "A90ZUKOs4799", proof: "A90ZUKOs4499" },
{ sku: "9017WKs43dp", quan: 200, farbigkeit44:"A90ZUKOs4699", proof: "A90ZUKOs4499" },
{ sku: "9017WKs43dp", quan: 200, farbigkeit40:"A90ZUKOs4599" }
];
function countElements() {
var res = {};
myData.forEach(function(value){
res[value.sku]=res[value.sku]||{quan:0};
res[value.sku].quan+=1*value.quan;
if(value.farbigkeit40 != undefined) {
res[value.farbigkeit40] = res[value.farbigkeit40] || {quan:0};
res[value.farbigkeit40].quan +=1;
}
if(value.farbigkeit44 != undefined) {
res[value.farbigkeit44] = res[value.farbigkeit44] || {quan:0};
res[value.farbigkeit44].quan +=1;
}
if(value.proof != undefined) {
res[value.proof] = res[value.proof] || {quan:0};
res[value.proof].quan +=1;
}
if(value.eindruck != undefined) {
res[value.eindruck] = res[value.eindruck] || {quan:0};
res[value.eindruck].quan +=1;
}
});
return res;
}
console.log(countElements());
$('#result').html(JSON.stringify(countElements(),null,4));
内置第二个forEach
。我试过这个但是我没有得到相同的结果。
["farbigkeit40","farbigkeit44","proof","eindruck"].forEach(function(p) {
res[value.p]=res[value.p] || {quan:0};
res[value.p].quan += 1;
})
答案 0 :(得分:0)
你快到了。您应该使用value.p
而不是value[p]
。
object.prop
在prop
内引用名为object
的属性。
object[prop]
对该属性的引用,其名称为'值为' prop
内的object
。
E.g。 p = 'farbigkeit44'
:value[p]
与value['farbigkeit44']
相同,与value.farbigkeit44
相同。