Фильтровать значение индекса foreach в Javascript - PullRequest
1 голос
/ 19 июня 2019

Как отфильтровать значение индекса в Javascript foreach с условием, если

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 ]

1 голос
/ 19 июня 2019

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), [])
        )
0 голосов
/ 19 июня 2019

Я думаю, что нет необходимости сохранять результаты явно в массиве снова, фильтр на массив сам создаст массив результатов на основе условия фильтра.

Для получения дополнительной информации о фильтре,

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

В вашем случае

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

справится с задачей.

0 голосов
/ 19 июня 2019

Есть несколько моментов, которые необходимо отметить.

  • filter функция вернет массив, и даже если он пустой (без соответствующих результатов), он все равно будет оцениваться как true, т.е.условие всегда будет выполняться
  • Условие 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, []);
...