мне приходится писать многоКаков наилучший способ перебора фильтрованного набора свойств объекта в JavaScript?
for (var prop in obj)
{
if (condition(prop))
{
// ...
}
}
-типа разделов в моем рабочем коде. Ниже приведены несколько примеров, непосредственно скопированных.
(1)
for (var region in this.DealsByRegion) // iterate through regions
{
if (this.RegionsChecked[region] === true) // if region is checked in table
{
num_deal_opportunities += region.NumOpportunities;
total_deal_percentage += region[dealName] * region.NumOpportunities;
}
}
(2)
for (var deal_name in this.DealsChecked)
{
if (this.DealsChecked[deal_name] === true)
{
offer_data.push({ value: deal_percentages[deal_name],
color: this.ColorStack[(this.ColorStack.length + i) % this.ColorStack],
highlight: this.HighlightColor,
label: deal_name });
}
}
и, конечно, много случаев
for (var thisguy in theseguys)
{
if (theseguys.hasOwnProperty(thisguy)
{
// ...
}
}
мне интересно, если есть способ сделать это более изящным и компактный. Я попытался написания LINQ-как ИНЕКЕ
// helper function for iterating through a filtered set of properties
Object.prototype.PropsWhere = function (cond)
{
var propsWhere = [];
for (var prop in this)
{
if (cond(prop))
{
propsWhere.push(prop);
}
}
return propsWhere;
}
, но когда я попытался использовать его, я понял, что это на самом деле сделал все менее компактный и читаемым и, конечно, я должен тогда иметь дело с новым this
и болтовня-болтовня.
Как я должен приближаться к этим ситуациям?
То, что вы делаете, кажется прекрасным, все остальное, вероятно, просто усложнит его, например 'Object.keys (this.DealsByRegion) .filter (Number) .forEach (function() {...' и т. Д. – adeneo
Являются ли ' объекты и массивы этого.DealsByRegion' и 'this.DealsChecked'? – jfriend00
@adeneo beware,' [0, 1, 2] .filter (Number); // [1, 2] ' –