Ich habe eine Reihe solcher Autos:

[{ name:"Toyota Minivan", id:"506" }, { name:"Honda Civic", id:"619" }]

Ich versuche zu überprüfen, ob das Array eine bestimmte ID enthält.

Ich habe versucht

var x =!!_.where(cars, {id:'506'}).length;

Erwartet, dass es true zurückgibt, wenn das Array die ID enthält, aber es gibt immer false zurück.

Was mache ich hier ?

Übrigens muss ich underscore.js nicht verwenden, wenn es einen besseren Weg gibt, dies zu tun.

Danke Thomas

2
ThomasD 21 Nov. 2013 im 03:56

4 Antworten

Beste Antwort

Ihr Code funktioniert (sobald Sie die Syntaxfehler im Objektarray behoben haben): http://jsfiddle.net/ArPCa/

var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];
var x =!!_.where(cars, {id:'506'}).length;
console.log('value: ' + x);

Gibt "value: true" zurück. Es muss also woanders ein Problem geben.

Ein besserer Weg, dies zu tun, könnte some sein:

var y = _.some(cars, function(c) {
    return c.id == '506'; 
});
13
Gabe Moothart 21 Nov. 2013 im 00:09

Ich weiß, das ist spät, aber noch einfacher:

var cars = [{ name:"Toyota Minivan", id:"506"}, { name:"Honda Civic", id:"619"}];

function findById(id) {
  return _.contains(_.pluck(cars, 'id'), id);
}
5
justin 5 Mai 2014 im 22:59

Angenommen, Sie haben das Array arr und Ihre ID id.

arr.filter(function(elem) { return elem.id == id; });

Gibt ein Array mit den passenden Elementen zurück;

Sie könnten es in eine Funktion wie:

function findById(arr, id) {
 var filtered = arr.filter(function(elem) { return elem.id == id; });
 return filtered && filtered.length ? filtered[0] : null;
}

Und möglicherweise andere Dinge tun, wenn Sie mit dem standardmäßig gefilterten Array nicht zufrieden waren.

4
Gopherkhan 2 Sept. 2016 im 04:53
var obj = [{
    name: "Toyota Minivan",
    id: "506"
}, {
    name: "Honda Civic",
    id: "619"
}];

function findCar(id) {
    return obj.filter(function (car) {
        if (car.id == id) {
            return car;
        }
    });
}
0
Nick 21 Nov. 2013 im 00:06