过滤Javascript中的foreach索引值

时间:2019-06-19 05:58:38

标签: javascript loops filter indexof

如何在有条件的情况下在foreach Javascript中过滤索引值

  

last_login = null

然后将过滤后的值存储到

  

this.searchLogin

以下图片是以下内容的输出: console.log(obj);

enter image description here

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

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);

3 个答案:

答案 0 :(得分:1)

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 => x.i));



//With reduce
console.log("With reduce: ",
        obj.reduce((p, c, i) => (!c.profile.last_login && p.push(i), p), [])
        )

答案 1 :(得分:0)

需要注意一些要点

  • filter函数将返回一个数组,即使它为空(没有匹配的结果),它仍将被评估为true,即您的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, []);

答案 2 :(得分:0)

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

有关过滤器的更多信息,

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

就您而言,

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

可以解决问题。