Key dizisinin içinden tümünü seçin: name bir şeye eşittir

I have got array of var players = [] that holds info like userID, userScore etc.. usually I would select specific player by doing something like players[i] where i is a number position in array. But for one bit of my application I do not know this number, but I do know userID And I'm trying to figure out how to update userScore in players array where userID is equal to something, lets say abc_123

0
@RocketHazmat Bu benim ilk düşüncemdi, ancak ondan bir şeyi seçmek için kilit değerlerden birini bilmenin bir yolu yok mu?
katma yazar Ilja, kaynak
@ LcSalazar evet
katma yazar Ilja, kaynak
Bir nesne bu bilgiyi saklamak için bir diziden daha iyi bir yol olmaz mıydı?
katma yazar j08691, kaynak
Her dizi öğesi bir JavaScript nesnesidir?
katma yazar LcSalazar, kaynak
Dizi üzerinde döngü ve bir eşleşme bulduğunuzda durun.
katma yazar Rocket Hazmat, kaynak
Ayrıca indexOf dizininde kullanabilirsiniz: geliştirici .mozilla.org/tr-tR/docs/Web/JavaScript/Referans/& hellip;
katma yazar taylorc93, kaynak

6 cevap

Dizi öğelerinin nesne olduğunu varsayarsak, filter işlevini kullanabilirsiniz:

var player = players.filter(function(p)
{
    return p.userID == "something";
}).forEach(function(p) {
    p.userScore = "something";
});
1
katma

Array.find yöntemi:

var players = [ { userId: 123 } ];
var user = players.find(function(item) {
    return item.userId === 123;
});

if (user != null) {
   //user is the first element in the players array that
   //satisfied the desired condition (a.k.a user.userId === 123)
}
1
katma
Array.find yönteminin ECMA5 standardının bir parçası değil Deneysel olduğunu not etmek gerekir.
katma yazar Jite, kaynak
for(var i = 0; i < players.length; i++){
    if(players[i].userId === 'someId'){
        //doSomething(player[i]);
        players[i].userScore = 'abc_123';
    }
}
1
katma

filtresini işlevi.

var findId = 'jkl';
var theGoose = players.filter(function(user){ return user.userId === findId; }).pop();

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

var players = [
{
  userId: 'abc',
  userInfo: 'duck'
},
{
  userId: 'def',
  userInfo: 'duck'
},
{
  userId: 'ghi',
  userInfo: 'duck'
},
{
  userId: 'jkl',
  userInfo: 'goose!'
},
{
  userId: 'mno',
  userInfo: 'duck'
}];

var findId = 'jkl';
var theGoose = players.filter(function(user){ return user.userId === findId; }).pop();
$('#debug').text( theGoose.userInfo );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="debug"></div>
</div> </div>
0
katma

Grep ile deneyin:

var players = [
    {score: 10,userId: 1},
    {score: 20,userId: 2},
    {score: 30,userId: 3}
];


function findByUsrId(id){
    return $.grep(players, function(item){
      return item.userId == id;
    });
};

console.log(findByUsrId(2));

Jsfiddle here: http://jsfiddle.net/pfbwq98k/

0
katma

Bir dizi yerine bir sözlük kullanmak isteyebilirsiniz. Anahtar doğal olarak oyuncu kimliği olabilir. Bilginin geri kalanı bazı nesne türlerine yerleştirilebilir. Ardından Sözlüğe anahtarla kolayca erişebilirsiniz.

0
katma