2014-12-02 82 views
1

我正在排序基于各种条件的对象数组。我可以在JavaScript对象中保存条件吗?

我想计算每个对象的各种条件,我不知道我应该如何achivie这一点。我能以某种条件语句添加到一个目标:通过

var conversions = [ 
    { 
    name: "Användare", 
    conditional: conversion.time_gap > 0, 
    count: 0, 
    } 
] 

,然后循环并对其进行测试:

_.each(user.apilog, function(event){ 
    _.each(conversions, function(conversion){ 
     if(conversion.conditional){ 
     conversion.count++; 
     } 
    }) 
}) 

这不会工作,因为time_gap里面user.apilog一个变量,没有定义,但像这样的东西。

+0

不能没有_.each是怎么回事......我可以在转换使用转换回答.. – 2014-12-02 20:59:30

+1

当你创建一个对象属性时,该值可以是任何JS表达式的结果。所以是的,你可以创建一个属性'conditional',它是评估'conversion.time_gap> 0'的结果。如果您将其作为'{conditional:conversion.time_gap> 0}'来执行,则该值将在创建该属性时进行设置。如果您需要在读取属性时动态评估它,最简单的方法就是使其成为一个方法:'''''''''''' }'。 – nnnnnn 2014-12-02 20:59:35

+0

为什么不直接在'if'中评估'user.apilog.magicproperty'? – Aprillion 2014-12-02 21:00:47

回答

7

你可以使用一个函数:

var conversions = [ 
    { 
    name: "Användare", 
    conditional: function(v) { return (v > 0); }, 
    count: 0, 
    } 
] 

称为:

_.each(user.apilog, function(event){ 
    _.each(conversions, function(conversion){ 
     if(conversion.conditional(time_gap)){ 
     conversion.count++; 
     } 
    }) 
}) 
+0

如果可以使用箭头语法,它看起来非常好:'conditional:v => v> 0' – 2014-12-02 21:03:07

+0

@FelixKling - JavaScript是否支持lambda表达式? – 2014-12-02 21:05:53

+0

箭头表达式是可爱的,但当他们几乎不支持时,我会提醒他们。 – 2014-12-02 21:06:00

相关问题