Le code suivant obtient le titre de la page, le compare avec les données du tableau et me renvoie une valeur finale

var title = (document.title);

//test variables 
testarray =["blue","top","110","in stock", "red","down","111","in stock"]

//function
function testfunction(array, variable){
    var varindex = array.indexOf(variable)
    return array[varindex+2] 
}
//calling the function
testfunction(testarray, title)

var finalvalue = testfunction(testarray, title);

Donc, si le titre de ma page est Bleu, cela me donne la valeur 110 dont j'ai besoin. Cela fonctionne bien, mais de cette façon, le seul titre valide pour ma page doit être Bleu , sinon cela ne fonctionnera pas.

Je souhaite pouvoir avoir un titre de page plus long, tel que Chaussures bleues . J'ai essayé en ajoutant la variable suivante au début pour obtenir uniquement le premier mot du titre

var fulltitle = (document.title);
var title = fulltitle.split(' ').slice(0,1);

Mais ça ne marche pas. Quel est le problème avec mon code? Merci

2
Francesco 1 juin 2020 à 16:33

5 réponses

Meilleure réponse

Peu de problèmes ici:

  1. Lorsque document.title est Chaussures bleues et que vous faites alors:

    fulltitle.split(' ').slice(0,1)
    

    Il renvoie en fait un tableau comme ["Blue"]. Vous devez d'abord le convertir en texte comme:

    var title = fulltitle.split(' ').slice(0,1)[0];
    
  2. De plus, la valeur title renvoyée est dans un cas différent de ce que vous avez dans la variable de tableau testarray ("Blue" !== "blue"), donc indexOf ne fonctionne pas. Vous devez faire le titre en minuscules comme:

    var varindex = array.indexOf(variable.toLowerCase())
    

Démonstration de travail:

var fulltitle = "Blue Shoes";
var arr = fulltitle.split(' ').slice(0, 1);
var title = arr && arr.length ? arr[0] : "";

//test variables 
testarray = ["blue", "top", "110", "in stock", "red", "down", "111", "in stock"]

//function
function testfunction(array, variable) {
  var varindex = array.indexOf(variable.toLowerCase())
  return array[varindex + 2]
}

//calling the function
var finalvalue = testfunction(testarray, title);

console.log( finalvalue )
1
palaѕн 1 juin 2020 à 13:47

Les cas de test dans lesquels il réussit contiennent des mots tels que blue, blueberry, berry blue dans le tableau.
Remplacez simplement votre fonction de test par ce

function testfunction(array, variable){
   let indexCaptured = '';
   array.forEach((res, index) => {
      if(res.includes(variable)) {
         indexCaptured = array[index+2] 
      }
   });
   return indexCaptured;
}
1
Aditya toke 1 juin 2020 à 13:45

Je ne suis pas sûr de bien vous comprendre, mais il peut y avoir un problème. Le titre et la valeur du tableau peuvent commencer par des majuscules ou des minuscules. essayez de faire quelque chose comme ça.

var title = (document.title);

//test variables 
testarray =["blue","top","110","in stock", "red","down","111","in stock"]

//function
function testfunction(array, variable){
    // CHANGES HERE
    var varindex = array.indexOf(variable.toLocaleLowerCase())
    return array[varindex+2] 
}
//calling the function
testfunction(testarray, title)

var finalvalue = testfunction(testarray, title);
2
Yevhen Kazmirchuk 1 juin 2020 à 13:38

Utilisation de findIndex() et startsWith()

var title = 'red title';

//test variables 
testarray =["blue","top","110","in stock", "red","down","111","in stock"]

//function
function testfunction(array, variable){
    var varindex = array.findIndex(e => variable.startsWith(e))
    return array[varindex+2] 
}
//calling the function
testfunction(testarray, title)

var finalvalue = testfunction(testarray, title);
console.log(finalvalue)
0
User863 1 juin 2020 à 13:43

Essayez var title = fulltitle.split(' ')[0]. Et ramenez les pièces comparées dans le même registre var varindex = array.indexOf(variable.toLowerCase()).

0
Michael Mishin 1 juin 2020 à 13:40