У меня проблема с удалением ключа объекта с помощью цикла for - PullRequest
0 голосов
/ 06 декабря 2018

Я использую цикл for x in, чтобы проверить, является ли значение == to [], и если это так, удалите свойство с помощью remove, но оно просто не работает.

const whosOnline = (a) => {

var obj = { online:[],
offline:[],
away:[] };



for(let i = 0; i < a.length; i++){
if(a[i].lastActivity > 10 && a[i].status == 'online'){obj.away.push(a[i].username)}
else if(a[i].status == 'offline'){obj.offline.push(a[i].username)}
else{obj.online.push(a[i].username)}
  }
  for(let x in obj){
  console.log(obj[x])
   if(obj[x] === []){delete obj[x]}}
  return obj
    }

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

вы были близки, однако вам также нужно ссылаться на индекс массива для каждого значения ключа объекта.Комментарии, объясняющие это в приведенном ниже коде.

var obj = { online:[],
offline:[],
away:[] };

for(var x in obj){
    if(!obj[x][0]){ // The 0 is the index inside the online array, next loop it will be the offline array and then the away array.
        console.log('The array is empty');
        // Do what you want to do now that it is empty
        // This will continue to loop through and check the value of all the keys in the object.
    }
}
console.log('done');

Удачи - Митч из https://spangle.com.au

0 голосов
/ 06 декабря 2018

Используя некоторую отладку (просто проверяя, например, печатается ли console.log), вы обнаруживаете, что ваше условие if никогда не выполняется.

Это потому, что вы проверяете, равен ли массив вновь созданному пустому массиву.Это никогда не может иметь место, потому что объекты сравниваются по ссылке на объект, а не по значению.

Вместо этого вы, вероятно, захотите проверить, пуст ли ваш массив, выполнив 'if (obj [x] .length === 0) '(или короче:' if (! Obj [x] .length) ')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...