Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配Json键并替换为数组中的值_Javascript_Arrays_Json_Sorting - Fatal编程技术网

Javascript 匹配Json键并替换为数组中的值

Javascript 匹配Json键并替换为数组中的值,javascript,arrays,json,sorting,Javascript,Arrays,Json,Sorting,因此给出了一个简单的json对象 [ {"a": 1}, {"b": 2}, {"c": 3}, {"d": 4} ] 像这样的数组 var arr = ["A", "B", "C"]; 我想写一个最有效的函数来匹配小写键和大写计数器部分,并用大写字母替换它们,我首先将数组转换成一个对象,这样我就不必反复迭代了,但我卡住了。有人能告诉我他们将如何以最有效的方式处理此问题吗?如果没有关于您的密钥数量/可能的密钥数量的进一步信息,尝试制定通用解决方案将如下所示: var-arr

因此给出了一个简单的json对象

[
  {"a": 1},
  {"b": 2},
  {"c": 3},
  {"d": 4}
]
像这样的数组

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

我想写一个最有效的函数来匹配小写键和大写计数器部分,并用大写字母替换它们,我首先将数组转换成一个对象,这样我就不必反复迭代了,但我卡住了。有人能告诉我他们将如何以最有效的方式处理此问题吗?

如果没有关于您的密钥数量/可能的密钥数量的进一步信息,尝试制定通用解决方案将如下所示:

var-arr=[
{“a”:1},
{“b”:2},
{“c”:3},
{“d”:4}
]
变量匹配=[“A”、“B”、“C”];
var objMatch={}
对于(var i=0;i
在对象的原型链中定义重命名对象关键点的方法:

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])}
  }
}

对于(var i=0;i

您可以使用一个helper对象并通过所有项和所有键循环

var arr0=[{“a”:1},{“b”:2},{“c”:3},{“d”:4}],
arr1=[“A”、“B”、“C”],
obj=Object.create(空);
arr1.forEach(函数(a){
obj[a.toUpperCase()]=a;
});
arr0.forEach(函数(a){
Object.keys(a).forEach(函数(k){
var v=a[k];
if(obj中的k.toUpperCase()){
删除[k];
a[obj[k.toUpperCase()]=v;
}
});
});

document.write(''+JSON.stringify(arr0,0,4)+'');
根据我对您问题的理解

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);

不要让事情复杂化。使用
map
并返回一个新数组:


您是否希望更改所有的密钥,除了<代码> d>代码>?您可能想考虑将jQuery改写为香草JS,因为在这个问题中没有提到。
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);
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);