我有一个 json 变量,其中包含标签和相应的值。 标签是我的类别名称,值是我的类别 ID。
var src = {
"categories": [{
"label": "travel",
"value": "1"
}, {
"label": "food",
"value": "2"
}, {
"label": "banking",
"value": "3"
}, {
"label": "movies",
"value": "4"
}
]};
我想要一个函数,用上面 json 源中的值替换输入数组中的名称字段。
这是我的输入:
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中的标签==输入数组中的名称]
我尝试使用替换函数,但在循环中实现它遇到困难。
您能否分享实现此要求的任何方法?
这是我尝试过的-
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]);
});
我错过了什么?
还尝试使用替换函数将数组中的名称替换为 json 源变量的标签值。但无法弄清楚缺少什么。
最佳答案
您可以使用.filter()
method根据数据名称查找对应的源值:
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 = {
"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
}, {
'id': 4,
'name': 'notInArray',
'catvalue': 48
}];
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';
});
document.querySelector('pre').textContent = JSON.stringify(data, null, 4);
<pre></pre>
关于javascript - 如何用 json 标签的值替换输入数组中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121973/