2016-05-02 6 views
1

Ich möchte arr2 zurückgeben aber möchte den Benutzer, ob es Änderungen gibt oder nicht, indem Sie es mit arr. Mit dem Ansatz von unten bekam ich ID von undefined, wenn arr2 ein Element fehlt.mit JavaScript-Filter() mit einer Flagge

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}] 
 

 
var result = arr.filter(function(obj, i) { 
 
    return obj.id == arr2[i].id; 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

Ich bin darüber nicht überzeugt, dass Sie den richtigen Weg gehen. Sind Sie sicher, dass die IDs in der gleichen Reihenfolge sind? Was wäre, wenn arr2 die gleichen 2 Hashes hätte, aber in einer anderen Reihenfolge? Sollte das als eine Veränderung erkannt werden? Oder wenn sich der Name ändert? – karina

+0

@karina IDs werden identisch sein. Aber ist die Bestellung wichtig? –

+0

Warte ... Das frage ich dich. Ist die Reihenfolge im Array wichtig? Wenn zum Beispiel die IDs in jedem Array [1,2] und [2,1] wären, würden Sie das als "Änderung" betrachten. – karina

Antwort

1

Das Problem in Ihrem Code ist, dass arr[1] nicht definiert ist und Sie versuchen, id Eigenschaft nicht definiert zu bekommen. Nun, was Sie tun können, ist, IDs in Array zu bekommen, dann Index zu bekommen und basierend darauf im Filter zu überprüfen.

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}]; 
 

 
var arrIds = arr2.map(function(v) { 
 
    return v.id; 
 
}); 
 

 
var result = arr.filter(function(obj) { 
 
    var i = arrIds.indexOf(obj.id); 
 
    return i > -1 && 
 
    obj.name == arr2[i].name; // check name property here 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

Pranav, Überlegen Sie auch, ob 'Länge' von' arr2' größer ist als 'arr' .. – Rayon

+0

@ Rayon: was zu tun mit Array-Länge hier –

+0

Wenn 'arr2' hat Länge größer als' arr' .. – Rayon

0

Schleife durch arr2 in einem callback der .filter jedes Element von arr2 zu testen.

var arr = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 2, 
 
    name: 'something2' 
 
}] 
 

 
var arr2 = [{ 
 
    id: 1, 
 
    name: 'something' 
 
}, { 
 
    id: 5, 
 
    name: 'something' 
 
}, { 
 
    id: 8, 
 
    name: 'something' 
 
}]; 
 

 
var isValInArr = function(arr, key, val) { 
 
    for (var i = 0, len = arr.length; i < len; i++) { 
 
    if (arr[i][key] === val) { 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
}; 
 

 
var result = arr.filter(function(obj, i) { 
 
    return isValInArr(arr2, 'id', obj.id); 
 
}); 
 

 
document.write(JSON.stringify(result))

+0

wird dies überprüfen, ob die Artikel-Arrays die gleiche Eigenschaft hat oder nicht? –

+0

@JamieJordan, ich habe dich nicht bekommen :( – Rayon

+0

bedeutet für die ID, die den Wert von 1 hat, wie man überprüft, ob der Name Wert geändert hat, nicht 'etwas', sondern etwas anderes. –

Verwandte Themen