使用typescript读取对象中键的值

时间:2016-05-16 06:03:46

标签: object typescript

我有一个对象数组,每个对象都有两个属性:

{key:count}

我将配置我的图表,我应该设置图表的数据源,如下所示:

{meta: "unknown", value: [the count of unknown]},
{meta: "male", value: [the count of male]},
{meta: "female", value: [the count of female]}

让我说我当前的对象数组如下:

[{"0":"10"}, {"1":"7"}, {"2":"9"}]其中 0 代表未知性别, 1 代表男性, 2 代表女性。

如何将图表数据中的设置为一行,以便它可以根据对象数组中的键自动查找每个性别的计数。

编辑:

我已经写了一个方法,没关系:

public getKeyValue(data, key) {
    for (var i = 0; i < data.length; i++) {
        if (data[i].key == key)
            return data[i].count;
    }
    return 0;
}

但是,我想知道它是否可以在像LINQ这样的单行中使用。

1 个答案:

答案 0 :(得分:2)

你可以,但它并不漂亮。

这将完成这项工作:

<!-- Login Modal -->  
<div class="modal fade" id="login-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
  <div class="modal-content">                      
    <div class="modal-body">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
      <h4>Login or Register</h4>
      <!-- form class="aa-login-form" action="" -->
      <?= $this->Form->create(null, ['class' => 'aa-login-form']); ?>
        <label for="">Email address<span>*</span></label>
        <?= $this->Form->input('email', ['type' => 'text', 'placeholder' => 'Email', 'label' => '', 'required' => false]); ?>
        <!-- input type="text" placeholder="Username or email" -->
        <label for="">Password<span>*</span></label>
        <?= $this->Form->input('passwords', ['type' => 'text', 'placeholder' => 'password', 'label' => '', 'required' => false]); ?>
        <!-- input type="password" placeholder="Password" -->
        <!-- button class="aa-browse-btn" type="submit">Login</button -->
        <?= $this->Form->button('Submit', ['class' => 'aa-browse-btn']); ?> 
        <label for="rememberme" class="rememberme"><input type="checkbox" id="rememberme"> Remember me </label>
        <p class="aa-lost-password"><a href="#">Lost your password?</a></p>
        <div class="aa-register-now">
          Don't have an account?<a href='<?= $this->Url->build(['controller' => 'Users', 'action' => 'register']); ?>'>Register now!</a>
        </div>
      </form>
      <?= $this->Flash->render(); ?>
    </div>                        
  </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

Check an example in playground

但我不建议使用此代码代替您的代码,因为如果发现符合条件的代码,您的代码将不会遍历所有数组元素,无论是否与如果符合标准,则会对所有数组元素进行两次迭代。

例如:

data.map(item => item.key === key ? item.count : 0).reduce((previous, current) => previous + current);

数组(var key = "key3", data: { key: string, count: number}[] = [ { key: "key1", count: 1 }, { key: "key2", count: 2 }, { key: "key3", count: 3 }, { key: "key4", count: 4 }, { key: "key5", count: 5 }, //... { key: "key1554", count: 1554 } ]; )的长度为data,但您正在寻找第3个元素。
你的方式将有3次迭代,然后返回值,我的方式将有3108次迭代,1554函数的一个周期(1554),然后是map函数的另一个周期。