根据数组索引更新对象值

IT技术 javascript arrays reactjs object
2021-05-11 08:50:36

我在数组中有 2 个对象

dataV[1] = {
            "resolution": "4"
        };

datas[1] = {
     {qty_approved: "1", resolution: "5", status: "", order: "1332"}
}

如果两个索引相同,那么我想用第一个的值更新。我想将分辨率值从 5 更新为 4。基于 dataV 中新数组值的即将到来的值

预期输出如下:

datas[1] = {
     {qty_auth: "1", resolution: "4", status: "", order: "1332"}
}
4个回答

无论你在哪里更新你的value,dataV你都可以做这样的事情,更新datas

datas = datas.map((data, i) => {
  return { ...data, resolution: dataV[i].resolution };
});

如果你使用react,你可以做同样的事情在useEffectdataV作为一个依赖。所以,无论何时dataV发生变化,datas都会自动发生变化。

let array1 = [
    {
        resolution: '4',
    },
];

let array2 = [
    { qty_approved: '1', resolution: '5', status: '', order: '1332' },
];

let array3 = array1.map((element, index) => {
    if (typeof array2[index] != 'undefined') {
        return { ...array2[index], ...element};
    }
    return element;
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

由于您可以通过数组索引获取相应的元素,因此您可以像以下代码段一样轻松获取相应的分辨率:

datas.forEach( (_, i) => {
    datas[i].resolution = dataV[i].resolution
})
  • 使用Array#reducedataV在更新Map索引key和分辨率的同时迭代value
  • 使用Array#forEach,迭代datas,如果上面的map有这样一个索引的key,更新分辨率

const 
  dataV = [ { "resolution": "4" }, { "resolution": "7" }, { "resolution": "1" } ],
  datas = [
    { qty_approved: "1", resolution: "5", status: "", order: "1332" },
    { qty_approved: "1", resolution: "3", status: "", order: "1331" },
    { qty_approved: "1", resolution: "9", status: "", order: "1333" },
  ];

const indexResolutionMap = dataV.reduce((map, { resolution }, i) =>
  map.set(i, resolution)
, new Map);

datas.forEach((e, i) => {
  const resolution = indexResolutionMap.get(i);
  if(resolution) e.resolution = resolution;
});

console.log(datas);