Ivo
Ivo

Reputation: 2636

Match string against array and replace

I would like to know how to match a string against an array, and replace the string value.

I'm getting a pageTitle from the _viewID, this needs to be changed to the better looking name from the array.

var pageTitle = [
  ["ticket_dynamic", "Dynamic ticket page"],
  ["ticket_regular", "Regular ticket page"],
  ["cart_regular", "Regular cart page"]
];
var _viewID = _viewID || [];
//_viewID = ticket_dynamic 
// _viewID needs to be Dynamic ticket page

Upvotes: 1

Views: 68

Answers (3)

Luka Kvavilashvili
Luka Kvavilashvili

Reputation: 1389

A better option would be to change the format of your pageTitle variable. Instead of containing array of arrays, just use objects

var pageTitle = {
    "ticket_dynamic": "Dynamic ticket page",
    "ticket_regular": "Regular ticket page",
    "cart_regular": "Regular cart page",
};

var _viewID = "ticket_dynamic";
// same as writing pageTitle.ticket_dynamic, or pageTitle["ticket_dynamic"]
// but using the variable
_viewID = pageTitle[_viewID];

// outputs "Dynamic ticket page"
console.log(_viewID);

But if you are not able to do that, and you can't change the format

var pageTitle = [
    ["ticket_dynamic", "Dynamic ticket page"],
    ["ticket_regular", "Regular ticket page"],
    ["cart_regular", "Regular cart page"]
];

var _viewID = "ticket_dynamic";

for (var i = 0; i < pageTitle.length; i++) {
    var keyValue = pageTitle[i]; // the array containing your key and value

    // the first element [0] will be the key
    if (keyValue[0] == _viewID) {
         _viewID = keyValue[1];
         break;
    }

    if (i + 1 == pageTitle.length) {
        // if last iteration occured, the matching key pair was not found
        // so mark _viewID as false so you know that the match was not found
        _viewID = false;
    }
}

if (_viewID) console.log(_viewID);

Upvotes: 0

Kuba Wyrostek
Kuba Wyrostek

Reputation: 6221

If you are stuck with array of arrays then this snippet could do:

var pageTitle = [
  ["ticket_dynamic", "Dynamic ticket page"],
  ["ticket_regular", "Regular ticket page"],
  ["cart_regular", "Regular cart page"]
];
var _viewID = "cart_regular";

var match = pageTitle.find((current) => current[0] == _viewID);
_viewID = match ? match[1] : "";
console.log(_viewID);

Upvotes: 0

Shubham Khatri
Shubham Khatri

Reputation: 281854

A better approach will be to use pageTitle as an object rather than an array like

var pageTitle = {
      "ticket_dynamic": "Dynamic ticket page",
      "ticket_regular": "Regular ticket page",
      "cart_regular": "Regular cart page"
    }
    var _viewID = "ticket_dynamic";
    var viewId = pageTitle[_viewID];
    console.log(viewId);

Upvotes: 5

Related Questions