2016-03-10 3 views
8

Ich möchte über die Elemente eines Arrays und wenn eine Bedingung wahr ist, möchte ich ein neues Array erstellen.

Beispiel: Ich habe ein Array namens Nachrichten, deren Elemente Objekte sind, und ich möchte überprüfen, ob das ID-Attribut gleich 5 ist. Wenn ja, erstellen Sie ein neues Array nur aus diesem Objekt.

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]); 

Ich möchte mein Ergebnis sein:

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

, was Ihre Frage ist? Hast du ein Problem damit? – Nadir

+0

@ Nadir Ich sage am Ende, was mein Ergebnis sein muss. Offensichtlich kann ich es nicht erreichen. –

Antwort

4

Try Array.prototype.filter in diesem Zusammenhang zu verwenden,

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

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

Wenn Sie es wollen, prägnanter sein, dann könnten Sie ES6 verwenden Arrow function ,

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

Aber beachten Sie, dass ist der obige Code ähnlich,

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

Was ist, wenn ich will, dass meine message5 ein Objekt anstelle eines Arrays ist? –

+0

@mosmic Dann Ansatz dafür wäre anders. Willst du, dass ich es jetzt schreibe? :) –

+0

Wenn es Ihnen nichts ausmacht, wäre es hilfreich. –

2

try-Filter zu verwenden:

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

versuchen

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

    return value.id == 5; 

}); 
2

Verwenden Array filter() Methode

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

Ein Ansatz vollständig in jQuery könnte sein:

$(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

Das war, was ich im Sinn hatte. Offensichtlich vereinfacht die Filterfunktion alles, aber Ihre Antwort ist sehr hilfreich, da ich jetzt meinen Fehler sehe. –

Verwandte Themen