2017-03-20 2 views
0

Ich brauche eine JS-Array wieUnable Array von Arrays in JS machen

var locations = [ 
      ['Erbil, Soran POS', 36.649415, 44.534143, 4], 
      ['Duhok, Duhok', 36.867905, 42.948857, 4], 
      ['Duhok, Akre', 36.700016, 43.920457, 4], 
      ['Duhok, Zakho', 37.150462, 42.672677, 4], 
      ['Duhok, Shiladze', 36.650648, 44.519263, 4], 
      ['Duhok, Bardaresh', 36.650648, 44.519263, 4], 
      ['Mosel, Sinjar', 36.314216, 41.862443, 4], 
      ['Duhok, Duhok', 36.867905, 42.948857, 4], 
      ['Duhok, Akre', 36.741121, 43.880849, 4], 
      ['Duhok, Zakho', 37.150462, 42.672677, 4], 
      ['Duhok, Shiladze', 36.650648, 44.519263, 4], 
      ['Duhok, Bardaresh', 36.911505, 42.728491, 4], 
      ['Duhok, Amadia', 37.091727, 43.487692, 4], 
      ['Sulimanya, Sulimanya', 35.557045, 45.435943, 4], 
      ['Sulimanya, Dirbendikan', 35.110939, 45.695271, 4], 
    ]; 

ich so bin versucht zu machen:

var locations; 
for (i = 0; i < searchResults.length; i++) { 
    locations = new Array(searchResults[i].name, searchResults[i].latitude, searchResults[i].longtitude, searchResults[i].zm); 
    searchLocations.push(locations) 
} 

Aber sein ein Array machen, die Daten aber seine Länge hat ist '0' und daher kann ich keine for-Schleife usw. verwenden.

Bitte sagen Sie, was ich falsch mache?

+0

wo ist 'searchLocations' definiert? – abhishekkannojia

+0

Die 'searchLocations' werden von einem db-Ergebnis zurückgegeben und können erfolgreich als' searchResults [i] .name', 'searchResults [i] .latitude',' searchResults [i] aufgerufen werden.longitude', 'searchResults [i] .zm'. es ist nur das Ausführen von 'console.log (searchLocations.length);' gibt '0'. –

+0

können Sie Ihre Frage bearbeiten und searchResults posten? –

Antwort

0

Mit einigen Schlag und Versuche gelang es mir auf folgende Weise.

searchResults = data.data;//data from DB 
//console.log(searchResults); 
var locations = new Array(); 

for (i = 0; i < searchResults.length; i++) { 
locations[i] = [searchResults[i].name, searchResults[i].latitude, searchResults[i].longtitude, searchResults[i].zm]; 
} 

Dies machte genau die gleiche Anordnung wie ich

[ 
     ['Duhok, Duhok', 36.867905, 42.948857, 4], 
     ['Sulimanya, Sulimanya', 35.557045, 45.435943, 4], 
     ['Sulimanya, Dirbendikan', 35.110939, 45.695271, 4], 
]; 

Hoffnung benötigt, das hilft auch andere, die in diese Art von Problem.

1

Versuchen Sie, mit dem folgenden

var searchLocations=[]; 
for (i = 0; i < searchResults.length; i++) { 
    var locations = new Array(searchResults[i].name, searchResults[i].latitude, searchResults[i].longtitude, searchResults[i].zm); 
    searchLocations.push(locations) 
} 
+0

Das ist ein bisschen wie meine Frage, und die Tatsache, dass ich es versucht habe, aber es hat auch nicht funktioniert. –

+0

@MShoaibQureshi Ich habe versucht, Demo-Daten von Ihnen zur Verfügung gestellt und es funktioniert vollständig. –

0

wie Versuchen dieser

for (i = 0; i < searchResults.length; i++) { 
    var locations = []; 
    locations.push(searchResults[i].name); 
    location.push(searchResults[i].latitude); 
    location.push(searchResults[i].longtitude); 
    location.push(searchResults[i].zm) 
    searchLocations.push(locations) 
} 
+0

Verwendet dies, aber dies gibt auch Null Länge für 'console.log (searchLocations.length);' –

0

Sie Array.prototype.map können über jedes Element eines Arrays iterieren, die mit den zurückgegebenen Werte ein neues Array erstellt.

Wir verwenden auch Objekt-Destrukturierung, um die Schlüssel aus dem Objekt zu ziehen, indem Sie lokale Variablen innerhalb der Callback-Funktion erzeugen.

ES6

const searchResults = [ 
 
    { name: 'Erbil, Soran POS', latitude: 36.649415, longitude: 44.534143, zm: 4 }, 
 
    { name: 'Duhok, Duhok', latitude: 36.867905, longitude: 42.948857, zm: 4 }, 
 
    { name: 'Duhok, Akre', latitude: 36.700016, longitude: 43.920457, zm: 4 }, 
 
] 
 

 
const searchLocations = searchResults.map(({ name, latitude, longitude, zm }) => ([ 
 
    name, 
 
    latitude, 
 
    longitude, 
 
    zm 
 
])) 
 

 
console.log(searchLocations)

ES5

var searchResults = [ 
 
    { name: 'Erbil, Soran POS', latitude: 36.649415, longitude: 44.534143, zm: 4 }, 
 
    { name: 'Duhok, Duhok', latitude: 36.867905, longitude: 42.948857, zm: 4 }, 
 
    { name: 'Duhok, Akre', latitude: 36.700016, longitude: 43.920457, zm: 4 } 
 
] 
 

 
var searchLocations = searchResults.map(function(location) { 
 
    return [ 
 
    location.name, 
 
    location.latitude, 
 
    location.longitude, 
 
    location.zm 
 
    ] 
 
}) 
 
    
 
console.log(searchLocations)

0

Nachdem ich Ihre Frage gründlich gelesen habe, bin ich zu dem Schluss gekommen, dass dies das sein könnte, was Sie erwarten.

var locations = [['Erbil, Soran POS', 36.649415, 44.534143, 4], ['Duhok, Duhok', 36.867905, 42.948857, 4], ['Duhok, Akre', 36.700016, 43.920457, 4], ['Duhok, Zakho', 37.150462, 42.672677, 4], ['Duhok, Shiladze', 36.650648, 44.519263, 4], ['Duhok, Bardaresh', 36.650648, 44.519263, 4], ['Mosel, Sinjar', 36.314216, 41.862443, 4], ['Duhok, Duhok', 36.867905, 42.948857, 4], ['Duhok, Akre', 36.741121, 43.880849, 4], ['Duhok, Zakho', 37.150462, 42.672677, 4], ['Duhok, Shiladze', 36.650648, 44.519263, 4], ['Duhok, Bardaresh', 36.911505, 42.728491, 4], ['Duhok, Amadia', 37.091727, 43.487692, 4], ['Sulimanya, Sulimanya', 35.557045, 45.435943, 4], ['Sulimanya, Dirbendikan', 35.110939, 45.695271, 4]], 
 
    searchResults = [], i = 0, elems = ['name', 'latitude', 'longitude', 'zm']; 
 

 
    while (i < 4){ 
 
     var obj = {}, arr = []; 
 
     locations.forEach(function(v){ 
 
     arr.push(v[i]) 
 
     }); 
 
     obj[elems[i]] = arr; 
 
     searchResults.push(obj); 
 
     i++ 
 
    } 
 
    console.log(searchResults);

0

Es scheint, das Problem ist, dass Ihre searchLocations Länge Eigenschaft als 0, und Sie können durch for (i = 0; i < i.length; i++) durch sie nicht Schleife da die Bedingung als falsch ausgewertet immer. Sie können jedoch auf das Element searchLocations nach Index zugreifen.

Basierend darauf, ich denke, die SearchLocations ist ein "Array-like Object" https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice#Array-like_objects, aber kein natives Array. Sie können versuchen, es durch searchLocationsArray = Array.prototype.call(searchLocations) in ein Array zu konvertieren und dann durchlaufen.