所以给出一个简单的JSON对象匹配的Json键和数组值替换
[
{"a": 1},
{"b": 2},
{"c": 3},
{"d": 4}
]
像这样
var arr = ["A", "B", "C"];
我想写的最有效的功能,以较低的情况相匹配的数组键与他们的大写柜台部分,并用大写字母替换它们,我开始将数组转换成一个对象,所以我不必一遍又一遍地迭代,但是Im卡住了。有人能告诉我他们将如何以最有效的方式处理这个问题吗?
所以给出一个简单的JSON对象匹配的Json键和数组值替换
[
{"a": 1},
{"b": 2},
{"c": 3},
{"d": 4}
]
像这样
var arr = ["A", "B", "C"];
我想写的最有效的功能,以较低的情况相匹配的数组键与他们的大写柜台部分,并用大写字母替换它们,我开始将数组转换成一个对象,所以我不必一遍又一遍地迭代,但是Im卡住了。有人能告诉我他们将如何以最有效的方式处理这个问题吗?
不会对你的钥匙/可能的密钥量的进一步信息,试图让一个通用的解决办法是这样的:
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)
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])}
}
}
这里是一个fiddle
你可以使用一个辅助对象和循环THROU所有项目和所有按键。
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>');
从我从你的问题理解
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);
你可能想考虑将jQuery重写为vanilla JS,因为它在问题中没有提及。 – Andy
不要让事情复杂化。使用map
并返回一个新的数组:
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);
你期待所有密钥改变_except_'D'? – Andy