Saya ingin membuat fungsi yang ketika saya memanggilnya, saya dapat memberikan jenis kelamin dan itu akan mengembalikan saya nama acak. Masalahnya adalah saya ingin itu dapat digunakan kembali di situlah saya mengalami kesulitan.

var Name = '';
var Gender = '';

var NameChild1(){
  var Child1Gender = 'Male'
  Child1Name = NameFunction(Child1Gender, Child1Name)
}

function NameFunction(Gender, Name) {
  var NameChance1 = Math.floor(Math.random() * 10) + 1;
  NameChance1 = NameChance1.toString();
  d3.csv('Names.csv', function(NameData) {
    var NameFilter = NameData.filter(function(d) {
      return (d.Rank == NameChance1)
    })
    if (Gender == 'Female') {
      Name = NameFilter[0]['NameFemale'];
      return (Name);
    } else if (Gender == 'Male') {
      return (Name);
    };
  });
};

Filter nama berfungsi dalam pernyataan if jika saya melakukan console.log di dalamnya - tetapi tidak kembali melewati itu.

Adakah yang tahu apa masalahnya?

Juga, ini adalah CSV jika itu membantu!

Rank,NameMale,NameFemale
1,Oliver ,Amelia 
2,Jack ,Olivia 
3,Harry ,Emily 
4,George ,Isla 
5,Jacob ,Ava 
6,Charlie ,Ella 
7,Noah ,Jessica 
8,William ,Isabella 
9,Thomas ,Mia 
10,Oscar ,Poppy
1
Jess 9 Agustus 2017, 14:34

2 jawaban

Jawaban Terbaik

Fungsi ini akan mengembalikan tidak terdefinisi.

function NameFunction(Gender, Name) {
  var NameChance1 = Math.floor(Math.random() * 10) + 1;
  NameChance1 = NameChance1.toString();
  d3.csv('Names.csv', function(NameData) {
    var NameFilter = NameData.filter(function(d) {
      return (d.Rank == NameChance1)
    })
    if (Gender == 'Female') {
      Name = NameFilter[0]['NameFemale'];
      return (Name);
    } else if (Gender == 'Male') {
      return (Name);
    };
  });
};

Alasan d3.csv('Names.csv') tidak sinkron.

Jadi Anda dapat melakukan sesuatu seperti ini:

var Name = '';
var Gender = '';
function NameFunction(Gender, Name, NameData) {
  var NameChance1 = Math.floor(Math.random() * 10) + 1;
  NameChance1 = NameChance1.toString();
    var NameFilter = NameData.filter(function(d) {
      return (d.Rank == NameChance1)
    })
    if (Gender == 'Female') {
      Name = NameFilter[0]['NameFemale'];
      return (Name);
    } else if (Gender == 'Male') {
      Name = NameFilter[0]['NameMale'];
      return (Name);
    };
  });
};
var NameChild1 = function(NameData){
  var Child1Gender = 'Male'
  Child1Name = NameFunction(Child1Gender, Child1Name, NameData)
  //you can do stuff with Child1Name
}
function loadMyCSV(){
  return d3.csv('Names.csv', function(NameData) {
    NameChild1(NameData);
  }
}
loadMyCSV();

Dalam kulit kacang:

1 Anda pertama kali memanggil loadMyCSV()

1.1. pada keberhasilan loadMyCSV NameChild1 akan dipanggil dan data parsing penuh diteruskan ke fungsi.

1.2. NameChild1 akan memanggil NameFunction yang akan mendapatkan Child1Name.

Semoga ini membantu!

1
Cyril Cherian 9 Agustus 2017, 12:14
var Name = '';
var Gender = '';

var NameChild1(){
  var Child1Gender = 'Male'
  Child1Name = NameFunction(Child1Gender);
  return Child1Name;
}

function NameFunction(Gender) {
  var Name;
  var NameChance1 = Math.floor(Math.random() * 10) + 1;
  NameChance1 = NameChance1.toString();
  d3.csv('Names.csv', function(NameData) {
    var NameFilter = NameData.filter(function(d) {
      return (d.Rank.toString() == NameChance1)
    })
    if (Gender == 'Female') {
      Name = NameFilter[0]['NameFemale'];
      return (Name);
    } else if (Gender == 'Male') {
      Name = NameFilter[0]['NameMale'];
      return (Name);
    };
  });
};
1
Kamal Raj 9 Agustus 2017, 12:11