Javascript 如何用json标签替换输入数组中的字段';s值多少?
我有一个json变量,它包含标签和相应的值。 标签是我的类别名称,值是我的类别idJavascript 如何用json标签替换输入数组中的字段';s值多少?,javascript,Javascript,我有一个json变量,它包含标签和相应的值。 标签是我的类别名称,值是我的类别id var src = { "categories": [{ "label": "travel", "value": "1" }, { "label": "food", "value": "2" }, { "label": "banking", "value": "3" }, { "label": "movies", "value": "4" } ]};
var src = {
"categories": [{
"label": "travel",
"value": "1"
}, {
"label": "food",
"value": "2"
}, {
"label": "banking",
"value": "3"
}, {
"label": "movies",
"value": "4"
}
]};
我希望有一个函数,用上述json源中的值替换输入数组中的name字段
以下是我的意见:
data=[
{'id': 0, 'name': 'banking', 'catvalue': 18},
{'id': 1, 'name': 'travel', 'catvalue': 12},
{'id': 2, 'name': 'movies', 'catvalue': 33},
{'id': 3, 'name': 'food', 'catvalue': 45}
];
修改后,输出应返回为
[
{'id': 0, 'name': '3', 'catvalue': 18},
{'id': 1, 'name': '1', 'catvalue': 12},
{'id': 2, 'name': '4', 'catvalue': 33},
{'id': 3, 'name': '2', 'catvalue': 45}
]
请注意,根据标签(名称),名称值将替换为json中可用的值。[json中的标签==输入数组中的名称]
我尝试使用replace函数,但在循环中实现它时遇到了困难
你能分享一下实现这一要求的方法吗
这是我试过的-
var d1 = [];
Object.keys(data).forEach(function(key) {
var nm = data[key].name;
if (nm == src.Categories.label) {
data[name] = src.Categories.value;
}
d1.push(data[key]);
});
我错过了什么
还尝试使用replace函数将数组中的名称替换为json源变量的标签值。但无法找出缺少的内容。使用for循环遍历
数据数组中的每个项,每次调用一个函数,返回给定标签的相应值
var src = {
"categories": [{
"label": "travel",
"value": "1"
}, {
"label": "food",
"value": "2"
}, {
"label": "banking",
"value": "3"
}, {
"label": "movies",
"value": "4"
}
]};
var data=[
{'id': 0, 'name': 'banking', 'catvalue': 18},
{'id': 1, 'name': 'travel', 'catvalue': 12},
{'id': 2, 'name': 'movies', 'catvalue': 33},
{'id': 3, 'name': 'food', 'catvalue': 45}
];
for (var i = 0; i < data.length; i++) {
var current = data[i];
var label = current.name;
var value = getValueForLabel(label);
current.name = value;
}
console.log(data);
function getValueForLabel(label) {
for (var i = 0; i < src.categories.length; i++) {
var current = src.categories[i];
if (current.label === label) {
return current.value;
}
}
return null;
}
var src={
“类别”:[{
“标签”:“旅行”,
“值”:“1”
}, {
“标签”:“食品”,
“值”:“2”
}, {
“标签”:“银行业务”,
“值”:“3”
}, {
“标签”:“电影”,
“值”:“4”
}
]};
var数据=[
{'id':0,'name':'banking','catvalue':18},
{'id':1,'name':'travel','catvalue':12},
{'id':2,'name':'movies','catvalue':33},
{'id':3,'name':'food','catvalue':45}
];
对于(变量i=0;i
使用for循环遍历数据
数组中的每个项,每次调用一个函数,返回给定标签的相应值
var src = {
"categories": [{
"label": "travel",
"value": "1"
}, {
"label": "food",
"value": "2"
}, {
"label": "banking",
"value": "3"
}, {
"label": "movies",
"value": "4"
}
]};
var data=[
{'id': 0, 'name': 'banking', 'catvalue': 18},
{'id': 1, 'name': 'travel', 'catvalue': 12},
{'id': 2, 'name': 'movies', 'catvalue': 33},
{'id': 3, 'name': 'food', 'catvalue': 45}
];
for (var i = 0; i < data.length; i++) {
var current = data[i];
var label = current.name;
var value = getValueForLabel(label);
current.name = value;
}
console.log(data);
function getValueForLabel(label) {
for (var i = 0; i < src.categories.length; i++) {
var current = src.categories[i];
if (current.label === label) {
return current.value;
}
}
return null;
}
var src={
“类别”:[{
“标签”:“旅行”,
“值”:“1”
}, {
“标签”:“食品”,
“值”:“2”
}, {
“标签”:“银行业务”,
“值”:“3”
}, {
“标签”:“电影”,
“值”:“4”
}
]};
var数据=[
{'id':0,'name':'banking','catvalue':18},
{'id':1,'name':'travel','catvalue':12},
{'id':2,'name':'movies','catvalue':33},
{'id':3,'name':'food','catvalue':45}
];
对于(变量i=0;i
您可以使用根据数据名称查找相应的源值:
data.forEach(function(el) {
var match = src.categories.filter(function(obj) {return obj.label === el.name;}),
value = match[0] && match[0].value;
el.name = value || 'NOT_FOUND';
});
见示例:
var src={
“类别”:[{
“标签”:“旅行”,
“值”:“1”
}, {
“标签”:“食品”,
“值”:“2”
}, {
“标签”:“银行业务”,
“值”:“3”
}, {
“标签”:“电影”,
“值”:“4”
}]
};
风险值数据=[{
“id”:0,
'姓名':'银行',
“catvalue”:18
}, {
“id”:1,
“姓名”:“旅行”,
“catvalue”:12
}, {
“id”:2,
“名称”:“电影”,
“catvalue”:33
}, {
"id":3,,
‘名字’:‘食物’,
“catvalue”:45
}, {
“id”:4,
'name':'notInArray',
“catvalue”:48
}];
data.forEach(函数(el){
var match=src.categories.filter(函数(obj){return obj.label==el.name;}),
值=匹配[0]&匹配[0]。值;
el.name=值| |“未找到”;
});
document.querySelector('pre').textContent=JSON.stringify(数据,null,4)代码>
您可以使用根据数据名称查找相应的源值:
data.forEach(function(el) {
var match = src.categories.filter(function(obj) {return obj.label === el.name;}),
value = match[0] && match[0].value;
el.name = value || 'NOT_FOUND';
});
见示例:
var src={
“类别”:[{
“标签”:“旅行”,
“值”:“1”
}, {
“标签”:“食品”,
“值”:“2”
}, {
“标签”:“银行业务”,
“值”:“3”
}, {
“标签”:“电影”,
“值”:“4”
}]
};
风险值数据=[{
“id”:0,
'姓名':'银行',
“catvalue”:18
}, {
“id”:1,
“姓名”:“旅行”,
“catvalue”:12
}, {
“id”:2,
“名称”:“电影”,
“catvalue”:33
}, {
"id":3,,
‘名字’:‘食物’,
“catvalue”:45
}, {
“id”:4,
'name':'notInArray',
“catvalue”:48
}];
data.forEach(函数(el){
var match=src.categories.filter(函数(obj){return obj.label==el.name;}),
值=匹配[0]&匹配[0]。值;
el.name=值| |“未找到”;
});
document.querySelector('pre').textContent=JSON.stringify(数据,null,4)代码>
根据您计划进行的查找数量以及您期望类别的大小,您可能会受益于生成从名称到值映射的查找表(即{“travel”:“1”,…}
。这将允许每次执行此操作时进行固定时间查找,而不是线性时间查找
根据您计划进行的查找数量以及您期望类别的大小,您可能会受益于生成从名称映射到值的查找表(即{“travel”:“1”,…}
。这将允许每次执行此操作时进行固定时间查找,而不是线性时间查找。您尝试了什么吗?因此不打算为您编写代码。是的..我尝试了一些东西..让我更新一下您有什么建议吗?这种方法对我来说也很好,我可以自己尝试src中的元素是否始终处于有序状态r?也就是说,第一个总是1,然后是2,等等?或者它们可以以不同的顺序混合在一起?也可以是随机的。你尝试了什么吗?所以不是打算为你写代码。是的。我尝试了一些东西。让我更新一下。你有什么建议吗?方法对我来说也很好,我可以自己尝试一下。src中的元素总是在o中吗