Javascript 如何用json标签替换输入数组中的字段';s值多少?

Javascript 如何用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" } ]};

我有一个json变量,它包含标签和相应的值。 标签是我的类别名称,值是我的类别id

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中吗