2016-05-26 15 views
2

Finding habe ich eine Reihe von Werten, die wie folgt aussieht:eine Reihe von Daten in einem Array von Objekten

["Ashar", 68345, 14, 46100, "Retail", 1, ""] 

ich auch eine Reihe von Objekten, die das wie folgt aussieht:

[ 
{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, 
{id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, 
{id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, 
{id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, 
{id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]} 
] 

Was ich versuche, ist, die ID im Objekt vom zweiten Array zu erhalten, indem ich die beiden Arrays abgleiche. Ich habe eine Suchfunktion geschrieben, die theoretisch das Array von Werten im zweiten Array finden sollte, damit ich auf die ID zugreifen kann. Es kehrt jedoch undefiniert zurück, so dass etwas eindeutig falsch ist mit dem, was ich mache. Hier

ist der Code, den ich derzeit haben:

let row_id = rows.find(row => { 
    dataEntriesArray === row.cells; 
}); 

wo Zeilen ist die zweite Matrix und dataEntriesArray ist die erste.

Jede Hilfe bei der Klärung dieser für mich würde sehr geschätzt werden.

Danke für Ihre Zeit.

+1

var result = array.filter (Funktion (Obj)) { return obj.cells }); –

Antwort

1

Dieser Vorschlag prüft jeder Teil des cells Array mit dem search Array und liefert die ID, falls vorhanden.

function getId(data, search) { 
 
    var id; 
 
    data.some(a => { 
 
     if (a.cells.every((b, i) => b === search[i])) { 
 
      id = a.id; 
 
      return true; 
 
     } 
 
    }); 
 
    return id; 
 
} 
 

 
var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""], 
 
    data= [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}]; 
 

 
console.log(getId(data, search));

+1

Genau das, was ich gesucht habe! Danke für Ihre Hilfe! – BeeNag

1

Verwenden Array#every

var ip1 = ["Ashar", 68345, 14, 46100, "Retail", 1, ""]; 
 

 
var ip2 = [{ 
 
    id: 1, 
 
    cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""] 
 
}, { 
 
    id: 2, 
 
    cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3] 
 
}, { 
 
    id: 3, 
 
    cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""] 
 
}, { 
 
    id: 4, 
 
    cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""] 
 
}, { 
 
    id: 5, 
 
    cells: ["David", 29008000, 229, 12500, "Retail", 5, 26] 
 
}]; 
 
var op = ip2.filter(function(item) { 
 
    return item.cells.every(function(el) { 
 
    return ip1.indexOf(el) > -1; 
 
    }) 
 
}); 
 
console.log(JSON.stringify(op));

1

versuchen Sie dies:

var search =["Ashar", 68345, 14, 46100, "Retail", 1, ""], 
foundId = null, 
a = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}]; 
search = search.sort().join(); 
a.forEach(function(entry) { 
if (entry.cells.sort().join() === search){ 
    foundId = entry.id; 
    return; 
} 
}); 

alert(foundId) 

JS Fiddle

1

Short-Lösung mit Array.some und JSON.stringify Funktionen:

var item = ["Rob", 94448, 17, 11395, "Retail", 1, ""], 
    data = [{id: 1, cells: ["Ashar", 68345, 14, 46100, "Retail", 1, ""]}, {id: 2, cells: ["Ashar", 300881, 14, 37000, "Retail", 3, 3]}, {id: 3, cells: ["Rob", 94448, 17, 11395, "Retail", 1, ""]}, {id: 4, cells: ["Shahab", 19023870, 219, 12500, "Retail", 1, ""]}, {id: 5, cells: ["David", 29008000, 229, 12500, "Retail", 5, 26]}]; 

var id; 
data.some((obj) => JSON.stringify(obj['cells']) === JSON.stringify(item) && (id = obj['id']), id); 

console.log(id); // 3 
Verwandte Themen