在JavaScript中迭代经过过滤的对象属性集的最佳方式是什么
What is the best way to iterate through a filtered set of properties of an object in 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的Where子句
// 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
和yada yada。
我应该如何处理这些情况?
如果您发现必须编写大量条件语句来迭代对象的属性,那么您可能需要重新检查您的模式。
使用您所在地区的示例:
for ( var region in RegionsChecked ) // iterate through checked regions
{
num_deal_opportunities += region.NumOpportunities;
total_deal_percentage += region[dealName] * region.NumOpportunities;
}
通过这种方式,您的容器只包含对您关心的对象的引用,而不是创建"元容器"来告诉您关心对象的id。
不确定这在您的基础设施中是否可行,但看看您是否可以创建所需对象的容器,而不是告诉您在其他容器中需要哪些对象的中间容器。
另一种方法是用"checked"属性/字段标记对象本身。但是,我的猜测是,你不想用像目前是否检查过这样短暂的东西污染你的物体。
相关文章:
- 什么'是使输入上禁用的属性与Meteor辅助对象反应的最佳方法
- 检查链接对象形式中未定义属性的最佳实践是什么
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 复制元素的最佳方式是:只复制元素的类型和属性
- 扩展或定义新的dat.gui属性控制器的最佳方法
- 使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
- 通用化用于切换禁用属性的代码的最佳方法
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- 添加属性/方法的明确最佳方法
- 使用 Angular JS 动态更新 jQuery UI 属性的最佳方法
- 关于在 Vue.js 中设置数据对象属性的最佳实践
- 在 JavaScript 对象文本中组织方法和属性的最佳方式
- 执行属性别名的最佳方法
- 在 IE8 中为对象中的每个属性添加附加属性的最佳方法是什么?
- jQuery中根据其数据属性包装元素的最佳方法是什么?
- 使用 javascript 实现属性-值搜索界面的最佳方法
- EmberJS:基于另一个属性重新加载控制器模型的最佳方法
- 使用jQuery命名属性的最佳模式
- 在ReactJS中重用映射循环中的属性-最佳实践
- JSON属性最佳实践