我有一个对象数组,每个对象都有两个属性:
{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这样的单行中使用。
答案 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">×</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
函数的另一个周期。