2016-05-13 8 views
-1

の値に置き換えキーを大文字のカウンターパーツで置き換え、大文字に置き換えたら、配列をオブジェクトに変えて始めたので、何度も繰り返す必要はありませんでしたが、私は固執しました。誰かが最も効果的な方法でこれをどう扱うのか教えてください。キー/可能なキーのご使用量の更なる情報がないマッチJSONのキーとそう簡単なJSONオブジェクト</p> <pre><code>[ {"a": 1}, {"b": 2}, {"c": 3}, {"d": 4} ] </code></pre> <p>と私は下ケースに合わせて、最も効率的な機能を書きたい、この</p> <pre><code>var arr = ["A", "B", "C"]; </code></pre> <p>のような配列を指定して配列

+0

mapを使用して新しい配列を返しますか? – Andy

答えて

0

、汎用的なソリューションをしようとすると、このようになります:

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"]; 

は、オブジェクトのプロトタイプチェーン内のメソッドを定義します。オブジェクトキーの名前を変更する:

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

は、その後、それを変更し、その後、配列の要素に一致するキーを検索します。ここでは

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

は、あなたはすべての項目およびすべてのキーthrouヘルパーオブジェクトとループを使用することができますfiddle

0

です。

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

私はあなたの質問

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

jQueryをバニラJSに書き直すことは、質問には触れられていないかもしれません。 – Andy

0

から理解して何から物事を複雑にしないでください。あなたはD ' `_除く_変更するすべてのキーのために期待している

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

関連する問題

 関連する問題