Javascript 匹配Json键并替换为数组中的值
因此给出了一个简单的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
[
{"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);