Home > Back-end >  Get last item active name on the list
Get last item active name on the list

Time:04-11

How can i have the last item on the list where the case it is success?

children: [
   {
    case: "no-success",
    name: "bruno",
    endOffset: 5
   },
   {
    case: "no-success",
    name: "pippo",
    endOffset: 5
   }
   {
    case: "success",
    name: "jo",
    endOffset: 5
   },
   {
    case: "success",
    name: "Matteo",
    endOffset: 5
   },
   {
    case: "np-success",
    name: "Robert",
    endOffset: 5
   }
]

I need to have the item where the name is Matteo.

Example for have the first i do : var foundIdx = this.newListWords[i].children.find(item => item.case === 'success').

CodePudding user response:

Definition:

The find() method returns the FIRST element in the provided array that satisfies the provided testing function. If no values satisfy the testing function, undefined is returned.

You can reverse array:

this.newListWords[i].children.reverse().find(item => item.case === 'success')

Or you can use filter and get last child

const filtered = this.newListWords[i].children.filter(item => item.case === 'success')
const lastFind = filtered[filtered.length-1]

CodePudding user response:

function lastSuccess(list: any[]): any {
  const SUCCESS_STRING = 'success';
  const [lastItem] = list // Take the list's head
    .filter(o => o.success === SUCCESS_STRING) // Filter for success
    .reverse(); // Reverse the list
  return lastItem;
}
const item = lastSuccess(this.newListWords[i].children);

CodePudding user response:

    var children = [
       {
        case: "no-success",
        name: "bruno",
        endOffset: 5
       },
       {
        case: "no-success",
        name: "pippo",
        endOffset: 5
       },
       {
        case: "success",
        name: "jo",
        endOffset: 5
       },
       {
        case: "success",
        name: "Matteo",
        endOffset: 5
       },
       {
        case: "np-success",
        name: "Robert",
        endOffset: 5
       }
    ];
    
    function getLastSuccess(children) {
        if (!Array.isArray(children)) {
            return {};
        }
        for (var i = children.length - 1, o; o = children[i]; i--) {
            if (o.case === 'success') {
                return o;
            }
        }
    }
    
    console.log(getLastSuccess(children));

CodePudding user response:

Single line code

let v = children.reduce((s, c) => { if (c.case === "success") { return c }  else { return s } }, null);

You will get null if there is no success.

CodePudding user response:

This should find the last item in the filtered array with 'success',

children.findLast(item => item.case === 'success')
  • Related