繁体   English   中英

在Javascript中过滤foreach索引值

[英]Filter foreach index value in Javascript

如何使用条件过滤foreach Javascript中的索引值如果

last_login = 空

然后将过滤后的值存储到

this.search登录

下图是输出: console.log(obj);

在此处输入图片说明

这是我到目前为止所做的:

try {
   this.searchTrigger = true
   var obj = this.list;

   this.searchLogin = [];

   for (let i=0; i < obj.length; ++i){
       if(obj.filter( x => obj[i].profile.last_login === null)){
          this.searchLogin.push(obj[i]);
       }
   }

console.log('This are obj data passed to search login',this.searchLogin);

 var obj = [ { profile: { last_login: null } }, { profile: { last_login: true } }, { profile: { last_login: null } }, { profile: { last_login: true } }, { profile: { last_login: null } }] //With filter and map console.log("With filter and map: ", obj.map((x, i) => ({ ...x.profile, i })) .filter(x => !x.last_login) .map(x => xi)); //With reduce console.log("With reduce: ", obj.reduce((p, c, i) => (!c.profile.last_login && p.push(i), p), []) )

有几点需要注意

  • filter函数将返回一个数组,即使它为空(没有匹配的结果),它仍然会被评估为真,即你的 if 条件将始终被执行
  • if条件在 for 循环内有一个过滤器函数,这意味着您不必要地检查数组中所有对象的同一对象的条件,即对于每个对象,过滤器函数将返回空数组或所有对象的数组。

您可以使用Array.reduce并将last_login信息存储在结果数组中

this.searchLogin = this.list.reduce((a,c) => c.profile.last_login === null ? a.concat(c.profile.last_login) : a, []);

我认为不需要再次将结果显式保存到数组中,数组上的过滤器本身将根据过滤条件创建一个结果数组。

有关过滤器的更多信息,

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

在你的情况下,

 this.searchLogin = obj.filter( x => x.profile.last_login === null);

会做的伎俩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM