简体   繁体   中英

javascript search in array elements

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.

You can iterate the array and check the attribute

or

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

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);
for (var i = 0; i < notes; i++) {
    if (notes[i].indexOf(search_date) != -1) {
        // notes [i] contain your date
    }
}
var match = JSON.stringify(notes).match("\"([^,]*),date\:"+search_date+",note\:([^,]*)\"");
alert(match[1]);
alert(match[2]);

works ;-)

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];

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]
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/

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM