如何比较两个数组对象,并将第一个数组对象附加到匹配条件键上,然后添加第二个?请建议。
例如,在下面的数据中,我需要将vale_data
服务密钥与sli_data
服务密钥进行比较,如果匹配,则将sli_data
vol_sli键值附加到{{1} }。
vale_data
我尝试过如下操作,但没有成功。
var vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"}]
var sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"}]
预期输出:
var vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"}]
var sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"}]
for (i=0; i<Object.keys(vale_data).length; i++) {
for (j=0; j<Object.keys(sli_data).length; j++) {
if (Object.values(vale_data)[i]['service'] == Object.values(sli_data)[i]['service']) {
vale_data.map(item => {item.vol_sli = Object.values(sli_data)[j]['vol_sli'] })
}
}
}
实际输出:
vale_data = [
{service: "allocateorder", vol_slo: "10000", vol_sli: "0.9484949"},
{service: "cancelorder", vol_slo: "10000", vol_sli: "0.242322"},
{service: "adviceorder", vol_slo: "10000", vol_sli: ""} ]
答案 0 :(得分:2)
您可以尝试通过以下方法进行尝试:将对象创建为地图,然后使用该对象获取输出数组。使用Javascript MAP存储结果
var vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"}]
var sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"}]
var sli_dataMap = new Map(sli_data.map(({service,vol_sli}) => ([service,vol_sli])));
vale_data = vale_data.map(obj => ({...obj,vol_sli:sli_dataMap.get(obj.service) || ''}));
console.log(vale_data);
答案 1 :(得分:0)
遍历每个数组,如果一个sli.service与一个vale.service相同,则向此vale添加一个等于sli.vol_sli的vol_sli字段。
vale_data.forEach(function (vale) {
sli_data.forEach(function (sli) {
if (sli.service === vale.service) {
vale.vol_sli = sli.vol_sli;
}
})
});
答案 2 :(得分:0)
var vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"}]
var sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"}]
var result = vale_data.map(vale_data_value => {
const check_sli_data = sli_data.find(sli_data_value => sli_data_value.service === vale_data_value.service );
if(check_sli_data){
vale_data_value.vol_sli = check_sli_data.vol_sli
}
return vale_data_value;
});
console.log(result)
答案 3 :(得分:0)
var vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"}];
var sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"}];
vale_data.map(vale_record => {
let rec_found = sli_data.find(sli_record => sli_record.service === vale_record.service);
if(rec_found) {
vale_record['vol_sli'] = rec_found['vol_sli'];
}
else {
vale_record['vol_sli'] = ''
}
return vale_record;
});
console.log(vale_data);
答案 4 :(得分:0)
完成此操作的一种可能方法是通过以下方式使用<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
和components = {{component string from DB}}
let formio = new Formio.createForm(document.getElementById(element),
components,
{
saveDraft: true,
readOnly: ((readonly) ? readonly : false)
}
).then(function (form) {
if (data) {
var subm = JSON.parse(data)
form.submission = { data: subm };
}
form.on('submit', function (submission) {
//Submission Code
});
form.on('change', function (x) {
//Change Code
})
form.on('error', (errors) => {
//Error Code
})
form.on("render", function () {
//Any Render Overrides?
})
}).catch(function (ex) {
});
:
map
答案 5 :(得分:0)
其他一些答案略有不同:
reduce
将该数组放入Map
const vale_data = [
{service: "allocateorder", vol_slo: "10000"},
{service: "cancelorder", vol_slo: "10000"},
{service: "adviceorder", vol_slo: "10000"},
]
const sli_data = [
{service: "allocateorder", vol_sli: "0.9484949"},
{service: "cancelorder", vol_sli: "0.242322"},
]
const mergedData = [...vale_data, ...sli_data].reduce((map, item) => {
const existing = map.get(item.service) || { vol_slo: "", vol_sli: "" };
map.set(item.service, {
...existing,
...item,
})
return map;
}, new Map());
console.log(Array.from(mergedData.values()));