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

var players = {
"player1": {
    "items": [{
        "item1": {
            "owned": false,
            "price": 3000,
        },
        "item2": {
            "owned": true,
            "price": 3000,
        }
    }]
}
}

Object.keys(players).forEach(player => {
for(var i =0; i < players[player].items.length; i++) {
    var not_owned = players[player].items.filter(item => {return item.owned === false});
    console.log(not_owned.length);
}
});

Но это не дает мне ничего, я пытался увидеть длину, и это дает мне 0,

Я пытался console.log без длины, и это дает мне undefined какие-либо идеи?

-1
Bader H. 8 Окт 2018 в 14:21

2 ответа

Лучший ответ

Вам нужно получить значения объекта внутренних элементов, а затем отфильтровать его

var players = {
"player1": {
    "items": [{
        "item1": {
            "owned": false,
            "price": 3000,
        },
        "item2": {
            "owned": true,
            "price": 3000,
        }
    }]
}
}

Object.keys(players).forEach(player => {
for(var i =0; i < players[player].items.length; i++) {
    var not_owned = Object.entries(players[player].items[i]).filter(([key, item]) => {return item.owned === false});
    console.log(not_owned.length);
}
});
1
Shubham Khatri 8 Окт 2018 в 11:27

Вам не нужен там цикл for. Теперь для каждой итерации forEach не принадлежащий будет содержать элементы, которые вы хотите для этого игрока.

var players = {
  "player1": {
    "items": [{
        "item1": {
            "owned": false,
            "price": 3000,
        },
        "item2": {
            "owned": true,
            "price": 3000,
        }
    }]
  }
}

Object.keys(players).forEach(player => {
  var not_owned = players[player].items.filter(item => {return item.owned === false});
  console.log(not_owned.length);
});
0
nikos fotiadis 8 Окт 2018 в 11:27