javascript - 根据索引和输入/下拉更改更新对象
问题描述
我必须根据下拉列表中的值更改和每个索引的输入来更新对象。下面是示例
datas[5] = { "qty_sized": "1", "resolution": "5", "status": "", "order": 1342 };
其中 [5] 是响应的动态。
我有和对象 mydata 并且在里面我有一个对象项目。
我将数组推送到对象项,并分配
Object.assign(mydatadata.items, datas);
现在 mydata.items 有一个数组集,
items{
1 {qty_auth: "", resolution: "5", status: "", order: "1495"},
5 {qty_sized: "1", resolution: "4", status: "", order: "1485"}
}
分辨率默认值为 5,根据 API 的状态为空。
我有一个输入字段,其中设置了 qty_ 值。每个索引的 2 个下拉列表,一个更改分辨率,其值为 3、4、5,另一个更改状态“允许”、“是”、“否”。
当我更改一个下拉列表时,我想将分辨率更新为 3,当我更新第二个下拉列表时,我想将状态更新为“允许”。
但是,当我更改分辨率值的下拉列表时,状态变为“”,而当我更改状态下拉列表时,分辨率值变为默认值 5。
我想像这样更新并保持变化的价值:
const mydatadata = {
items: {
1: {qty_auth: "", resolution: "3", status: "allow", order: "1495"},
5: {qty_sized: "1", resolution: "5", status: "", order: "1485"}
}
};
下面的代码是我试过的
var datas = [];
var mydatadata = {};
mydatadata.items = {};
var arr3;
let dataV = [];
var arr4;
let dataVs = [];
let rdata = {};
rdata.items = {};
overrideValue = (index, rId, itemid, override, resfield, statusValue) => {
if(override != "")
console.log(statusValue);
let stat = statusValue;
console.log(this.state.job.resolutions);
let res = this.state.job.resolutions.find(x => x.option_label === resfield.toLowerCase()).option_id;
for (var i = 0; i < datas.length; i++) {
console.log(datas.length);
if (datas[i] == 1) datas.push(5);
}
datas[rId] = {
[stat]: override,
"resolution": res.toString(),
"status": "",
"order": itemid
};
arr3 = datas.map((item, i) => Object.assign({}, item, dataV[i]));
console.log(arr3);
console.log(datas);
Object.assign(rmadata.items, arr3);
mydatadata.items = Object.fromEntries(
Object.entries(mydatadata.items)
.filter(([_, item]) => {
const qtyKey = Object.keys(item).find(key => key.startsWith('qty_'));
if (qtyKey && !item[qtyKey]) return false;
return true;
})
);
}
onChangeRes = (stringValue) => (event) => {
console.log(event.target.value);
console.log(stringValue);
dataVs[stringValue] = {
"resolution": event.target.value,
};
Object.assign(rdata.items, dataVs)
arr4 = datas.map((item, i) => Object.assign({}, item, dataVs[i]));
Object.assign(mydatadata.items, arr4);
console.log(mydatadata);
};
onChangeStatus = (stringValue) => (event) => {
console.log(event.target.value);
console.log(stringValue);
dataV[stringValue] = {
"status": event.target.value,
};
Object.assign(rdata.items, dataV)
console.log(dataV)
console.log(datas);
// Array.prototype.push.apply(datas, data);
arr3 = datas.map((item, i) => Object.assign({}, item, dataV[i]));
console.log(arr3);
console.log(datas);
Object.assign(mydatadata.items, arr3);
console.log(rmadata);
};
解决方案
推荐阅读
- javascript - 输入数量超过可用库存时如何生成警报
- c# - 我的代码永远不会到达 Monitor.Pulse 行
- php - Symfony 查询 - 检索一个用户的所有项目
- python - 我如何知道数据包将来自或来自 python 中的哪个 url
- rest - 使用 Spring Boot 和 JUnit 对 Rest 服务进行单元测试
- java - JSOUP 解析返回主页而不是提供 url
- python - 使用 Python 更新标签 Tkinter
- angular - 找不到模块:错误:无法解析“angular2-router-loader”
- ansible - 如何从用_items制作的循环中使用检查ansible任务结果?
- visual-studio - VS2017 不包含 Microsoft.Bcl.Build,而 VS2015 包含