1

I have array like this:

var notes = ["user1,date:13/2/2008,note:blablabla", "user1,date:15/2/2008,note:blablabla", "user1,date:17/2/2008,note:blablabla", "user1,date:13/3/2008,note:blablabla"];

And I have

var search_date="17/2/2008";

I want to find last occurence of note and user for that note. Anyone knows how? Thanks in advance for your reply.

4
  • I don't think there's anything built in, just write a loop. Commented Jul 5, 2013 at 13:48
  • Have you tried anything yet? You're gonna have to loop through, parse each value, and see if it matches. Commented Jul 5, 2013 at 13:48
  • Stringify, then use regexp. Just because it's possible :-) Commented Jul 5, 2013 at 13:55
  • @MrCkobe - see jsfiddle.net/Misiu/Wn7Rw Commented Jul 5, 2013 at 20:14

7 Answers 7

1

Try this:

var highestIndex = 0;
for (var i = 0; i < notes.length; i++){
    if (notes[i].indexOf(search_date) != -1){
        highestIndex = i;
    }
}
//after for loop, highestIndex contains the last index containing the search date.

Then to get the user, you can parse like this:

var user = notes[highestIndex].substring(0, notes[highestIndex].indexOf(',') - 1);
Sign up to request clarification or add additional context in comments.

4 Comments

Just be aware that indexOf isn't supported in IE8 and older. - stackoverflow.com/questions/3629183/…
Joel - thank you, but now this raises a question and I'm not 100% clear on the answer. I've read (for example, stackoverflow.com/questions/6829101/…) that indexOf on String (how I am using it) has existed since very early IE versions. I have read that indexOf support for Arrays does not exist for IE8 and below. I can't give a definitive answer on that without trying it, but it sounds like that's the case from other sources as well.
Oops - my mistake, I didn't read closely enough. Array indexOf is missing, but yes String's indexOf should work fine.
I know that there are similar solutions to this, but I marked this as answer because I used this solution. Thanks everyone for help.
1

You can iterate the array and check the attribute

or

you can user underscore.js: http://underscorejs.org/#filter

Comments

1
for (var i = 0; i < notes; i++) {
    if (notes[i].indexOf(search_date) != -1) {
        // notes [i] contain your date
    }
}

Comments

1
var match = JSON.stringify(notes).match("\"([^,]*),date\:"+search_date+",note\:([^,]*)\"");
alert(match[1]);
alert(match[2]);

works ;-)

Comments

0

Something like this:

var notes = ["user1,date:13/2/2008,note:blablabla", "user1,date:15/2/2008,note:blablabla", "user1,date:17/2/2008,note:blablabla", "user1,date:13/3/2008,note:blablabla"];
var search_date="17/2/2008";

var res = [];

for(var i = 0; i < notes.length; i++) {
  var note = notes[i];
  if(note.indexOf(search_date) !== -1) {
    res.push(note.substring(note.indexOf('note:') + 1), note.length);
  }
}

var noteYouWanted = res[res.length - 1];

Comments

0

For the last occurrence and if performance matters:

var notes = ['user1,date:13/2/2008,note:blablabla', 'user1,date:15/2/2008,note:blablabla', 'user1,date:17/2/2008,note:blablabla', 'user1,date:13/3/2008,note:blablabla'],
    search = '17/2/2008',
    notesLength = notes.length - 1,
    counter,
    highestIndex = null;

for (counter = notesLength; counter >= 0; counter--) {
    if (notes[counter].indexOf(search) !== -1) {
        highestIndex = counter;
        break;
    }
}

// do something with notes[highestIndex]

Comments

0
var notes = ["user1,date:13/2/2008,note:blablabla", "user1,date:15/2/2008,note:blablabla", "user1,date:17/2/2008,note:blablabla", "user1,date:13/3/2008,note:blablabla"];

var search_date="17/2/2008";
var user, note;

$.each(notes, function(i) {
    var search = new RegExp('\\b' + search_date + '\\b','i');
    // if search term is found
    if (notes[i].match(search)) {
      var arr = notes[i].split(',');
      user = arr[0];
      note = arr[2].substr(5);
    }
}); // end loop

console.log(user);
console.log(note);

example here: http://jsfiddle.net/Misiu/Wn7Rw/

1 Comment

@MrCkobe - click edit on top right, or use this link: jsbin.com/epexil/3/edit then on top click run with js

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.