I need to have the index of an object in array so I can delete this part of the array. I tried using this:
var index = this.urenRegistratie.indexOf(newDatum);
But it keeps returning -1 and I don't know why this is happening.
this is the part of the code I have. it gets data out of a form in html and places that into my array, now I already have an if statement ready ( exisitingDatum ), my code needs to be in there. Can someone please help me out a bit?
store(newValue:number, newDatum, newAanwezig, newComment){
const existingDatum = this.urenRegistratie.find(billable => {
return billable.datum === newDatum;
return
});
if (!existingDatum) {
let billable = new BillableHours();
billable.datum = newDatum;
billable.hours = +newValue;
billable.aanwezig = newAanwezig;
billable.comment = newComment;
if(billable.aanwezig == "Aanwezig" && billable.hours !== 0 && billable.datum !== null) {
this.urenRegistratie.push(billable);
}
}
if(existingDatum) {
}
}
The findIndex() method returns the index of the first element in the array that satisfies the provided testing function. Otherwise, it returns -1, indicating that no element passed the test.
If you have array of objects like this, then try to use findIndex
:
const a = [ { firstName: "Adam", LastName: "Howard" }, { firstName: "Ben", LastName: "Skeet" }, { firstName: "Joseph", LastName: "Skeet" } ]; let index = a.findIndex(x => x.LastName === "Skeet"); console.log(index);
Adding to the answer of @StepUp (and please select his answer as best, as it replies the question greatly):
Finding the index is not related to Angular, it is rather Vanilla JavaScript.
In your case, you need a function that has as parameter the newDatum
"needle" to be searched in the array "haystack" using findIndex :
var getNewDatumIndex = (array, newDatumNeedle) => {
return array.findIndex(x => x.newDatum === newDatumNeedle);
}
You can also add the method in the array prototype if you want, in order to ommit the first argument:
Array.prototype.getNewDatumIndex = (newDatumNeedle) => {
return this.findIndex(x => x.newDatum === newDatumNeedle);
}
An easy and elegant solution is to use _.isEqual , which performs a deep comparison using lodash library
Npm Package -- https://www.npmjs.com/package/lodash
const a = [
{ firstName: "Adam", LastName: "Howard" },
{ firstName: "Ben", LastName: "Skeet" },
{ firstName: "Joseph", LastName: "Skeet" }
];
const find = { firstName: "Joseph", LastName: "Skeet" }
index = a.findIndex(x => _.isEqual(x, find));
console.log(index);
store(newValue: number, newDatum, newAanwezig, newComment) { let index = this.urenRegistratie.indexOf(existingDatum);
const existingDatum = this.urenRegistratie.find(billable => {
return billable.datum === newDatum;
return
});
if (index != -1) {
let index = this.urenRegistratie.indexOf(existingDatum);
existingDatum.splice(index, 1)
} else {
let billable = new BillableHours();
billable.datum = newDatum;
billable.hours = +newValue;
billable.aanwezig = newAanwezig;
billable.comment = newComment;
if (billable.aanwezig == "Aanwezig" && billable.hours !== 0 && billable.datum !== null) {
this.urenRegistratie.push(billable);
}
}
}
sometimes, if you compare by id, you need to parseint, cause object's id is a string. care of this
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.