2016-03-10 8 views
8

Voglio eseguire un'iterazione sugli elementi di un array e se una condizione è vera, voglio creare un nuovo array.

Esempio: Ho un array chiamato Messaggi i cui elementi sono oggetti e voglio verificare se l'attributo id è uguale a 5. Se si, creare un nuovo array composto solo da questo oggetto.

messages = [{ 
    "id": 10, 
    "body": "hello!" 
}, { 
    "id": 21, 
    "body": "hola!" 
}, { 
    "id": 5, 
    "body": "ciao!" 
}]; 

var message5 = []; 
var dataObj = {}; 

$.each(messages, function(index, value) { 
    if (value.id == 5) { 
    dataObj[index] = value; 
    } 
}); 

message5.push(dataObj[index]); 

voglio che il mio risultato sia:

message5 = [ 
{ 
    "id": 5, 
    "body": "ciao!" 
} 
]  
+0

qual è la tua domanda? Hai qualche problema a farlo? – Nadir

+0

@Nadir In fondo dichiaro in fondo quale deve essere il mio risultato. Ovviamente non posso realizzarlo. –

risposta

4

tenta di utilizzare Array.prototype.filter in questo contesto,

var message5 = messages.filter(function(itm){ 
    return itm.id == 5; 
}); 

console.log(message5); //[{"id": 5,"body": "ciao!"}] 

Se si vuole che sia più conciso allora si potrebbe utilizzare ES6 Arrow function ,

var message5 = messages.filter(itm => itm.id == 5); 
console.log(message5); //[{"id": 5,"body": "ciao!"}] 

Ma nota che, il codice sopra è simile,

var message5 = messages.filter(function(itm){ 
    return itm.id == 5; 
}.bind(this)); //Arrow function will automatically bind its lexical scope to it. 
+0

Cosa succede se desidero che il mio messaggio5 sia un oggetto anziché un array? –

+0

@mosmic Quindi l'approccio per quello sarebbe diverso. vuoi che lo scriva adesso? :) –

+0

Se non ti dispiace, sarebbe utile. –

2

tenta di utilizzare filtro

var messages = [{ 
 
    "id": 10, 
 
    "body": "hello!" 
 
}, { 
 
    "id": 21, 
 
    "body": "holla!" 
 
}, { 
 
    "id": 5, 
 
    "body": "ciao!" 
 
}]; 
 
var message5 = messages.filter(function(message) { 
 
    return message.id == 5; 
 
}); 
 
alert(JSON.stringify(message5));

2

prova

var newArr = messages.filter(function(value){ 

    return value.id == 5; 

}); 
2

Usa filtro Array() metodo

messages.filter(function(msg){return msg['id'] === 5}) 
2

Un approccio completamente in jQuery potrebbe essere:

$(function() { 
 
    var messages = [{ 
 
    "id": 10, 
 
    "body": "hello!" 
 
    }, { 
 
    "id": 21, 
 
    "body": "holla!" 
 
    }, { 
 
    "id": 5, 
 
    "body": "ciao!" 
 
    }]; 
 
    var dataObj = []; 
 

 
    $.each(messages, function (index, value) { 
 
    if (value.id == 5) { 
 
     dataObj.push(messages[index]); 
 
    } 
 
    }); 
 
    $('#result').text(JSON.stringify(dataObj, 4, 4)); 
 
});
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 

 

 
<textarea id="result" style="width: 250px;height: 100px"></textarea>

+1

Questo è quello che avevo in mente. Ovviamente la funzione filtro semplifica tutto, ma la tua risposta è molto utile perché vedo il mio errore ora. –

Problemi correlati