2016-05-13 11 views
-1

So ein einfaches JSON-Objekt gegebenSpiel Json Tasten und mit Werten in einem Array ersetzen

[ 
    {"a": 1}, 
    {"b": 2}, 
    {"c": 3}, 
    {"d": 4} 
] 

und eine Anordnung wie diese

var arr = ["A", "B", "C"]; 

ich die effizienteste Funktion schreiben will das untere Gehäuse passen Schlüssel mit ihren Großbuchstabengegenstücken und ersetze sie mit den Großbuchstaben, ich begann, indem ich das Array in ein Objekt verwandelte, so dass ich nicht immer und immer wieder iterieren muss, aber ich haftete. Kann mir bitte jemand zeigen, wie sie damit am effizientesten umgehen würden?

+0

Erwarten Sie für alle Schlüssel zu _except_ 'd' geändert werden? – Andy

Antwort

0

Ohne weitere Informationen über Ihre Menge von Tasten/möglichen Schlüssel, eine generische Lösung zu machen versuchen, so sein würde:

var arr = [ 
 
    {"a": 1}, 
 
    {"b": 2}, 
 
    {"c": 3}, 
 
    {"d": 4} 
 
] 
 

 
var match = ["A", "B", "C"]; 
 

 
var objMatch = {} 
 

 
for(var i=0;i<match.length;i++) objMatch[match[i].toLowerCase()] = match[i] // pass it to an object for efficient matching 
 

 
for(var i=0;i<arr.length;i++){ 
 
    for(var key in arr[i]){ // check if we need to replace the key 
 
     if(objMatch.hasOwnProperty(key)){ 
 
      var temp = arr[i][key] // keep old value 
 
      delete arr[i][key] // delete key 
 
      arr[i][objMatch[key]] = temp // set new key with same old value 
 
     } 
 
    } 
 
} 
 

 
console.log(arr)

0
var a=[ 
{"a": 1}, 
{"b": 2}, 
{"c": 3}, 
{"d": 4} 
]; 

var arr = ["A", "B", "C"]; 

ein Verfahren in den Prototyp des Objekts Kette definieren Umbenennen von Objektschlüsseln:

Object.prototype.changeKey = function (oName, nName) { 
    if (oName == nName) { 
     return this; 
    } 
    if (this.hasOwnProperty(oName)) { 
     this[nName] = this[oName]; 
     delete this[oName]; 
    } 
return this; 
}; 

Dann den Schlüssel finden, die die Elemente des Arrays übereinstimmt, dann ändern:

for(var i=0;i<arr.length;i++){ 
    for(key in a[i]){ 
    if(key === arr[i].toLowerCase()){a[i].changeKey (key,arr[i])} 
    } 
} 

Hier ist ein fiddle

0

Sie könnten ein Hilfsobjekt und Schleife throu alle Artikel und alle Schlüssel verwenden.

var arr0 = [{ "a": 1 }, { "b": 2 }, { "c": 3 }, { "d": 4 }], 
 
    arr1 = ["A", "B", "C"], 
 
    obj = Object.create(null); 
 

 
arr1.forEach(function (a) { 
 
    obj[a.toUpperCase()] = a; 
 
}); 
 
arr0.forEach(function (a) { 
 
    Object.keys(a).forEach(function (k) { 
 
     var v = a[k]; 
 
     if (k.toUpperCase() in obj) { 
 
      delete a[k]; 
 
      a[obj[k.toUpperCase()]] = v; 
 
     } 
 
    }); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(arr0, 0, 4) + '</pre>');

0

Von dem, was ich aus Ihrer Frage verstehen

var arrayOne = [ 
{"a": 1}, 
{"b": 2}, 
{"c": 3}, 
{"d": 4} 
]; 
var arrayTwo = ["A", "B", "C"]; 
var tempArray = {}; 
$.each(arrayOne, function(key,value){ 
    for(arrayOneKey in value){ 
    $.each(arrayTwo, function(index,vl) { 
     if(vl.toLowerCase() == arrayOneKey.toLowerCase()){ 
     tempArray[vl]=key+1; 
     } 
    }); 
    } 
}); 
console.log(tempArray); 
+0

Sie sollten erwägen, die jQuery in vanilla JS umzuschreiben, da sie in der Frage nicht erwähnt wird. – Andy

0

nicht Dinge kompliziert machen Sie. Verwenden Sie map und zurück ein neues Array:

function transform(arr, keys) { 
    return arr.map(function(el) { 
    var obj = {}; 
    var key = Object.keys(el)[0]; 
    var uc = key.toUpperCase(); 
    obj[keys.indexOf(uc) > -1 ? uc : key] = el[key]; 
    return obj; 
    }); 
} 

transform(input, arr); 

DEMO

Verwandte Themen