首页 > 解决方案 > 根据索引和输入/下拉更改更新对象

问题描述

我必须根据下拉列表中的值更改和每个索引的输入来更新对象。下面是示例

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);
    };

标签: javascriptarraysreactjsobject

解决方案


推荐阅读