Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用其他数组中的值更新数组中对象的值_Javascript_Arrays - Fatal编程技术网

Javascript 使用其他数组中的值更新数组中对象的值

Javascript 使用其他数组中的值更新数组中对象的值,javascript,arrays,Javascript,Arrays,我试图重现我原来的问题; 我有两个数组处于react状态。数组1是数据库中的原始数组,数组2是更新后的数组is状态 目标是只更新已更改的速率,而不将数量(和其他参数)更新回数据库,因此我需要使用对象2中与Array2中的对象匹配的速率值更新Array1中的速率值 Array1 = [{ id: 1, name: IceCream, details: [{ id: "12", name: "milk", quantity: "

我试图重现我原来的问题; 我有两个数组处于react状态。数组1是数据库中的原始数组,数组2是更新后的数组is状态

目标是只更新已更改的速率,而不将数量(和其他参数)更新回数据库,因此我需要使用对象2中与Array2中的对象匹配的速率值更新Array1中的速率值

Array1 = [{
    id: 1,
    name: IceCream,
    details: [{ id: "12", name: "milk", quantity: "50", rate: "100" },
    { id: "13", name: "cream", quantity: "50", rate: "300" }]
},
{
    id: 2,
    name: Coffee,
    details: [{ id: "14", name: "Coffee bean", quantity: "60", rate: "200" },
    { id: "15", name: "water", quantity: "60", rate: "300" }]

},
{
    id: 3,
    name: Tea,
    details: [{ id: "16", name: "Tea leaf", quantity: "50", rate: "700" }]
}]


Array2 = [{
    id: 1,
    name: IceCream,
    details: [{ id: "12", name: "milk", quantity: "50", rate: "500" },
    { id: "13", name: "cream", quantity: "50", rate: "700" }]
},
{
    id: 2,
    name: Coffee,
    details: [{ id: "14", name: "Coffee bean", quantity: "60", rate: "800" },
    { id: "15", name: "water", quantity: "60", rate: "8000" }]
}]

您需要使用
.map
迭代
Array1
中的对象,通过
id
使用
检查
Array2
中是否存在该对象。查找
。然后,迭代细节并更新速率(如果第二个数组中也存在):

让数组1=[
{
id:1,
名称:“冰淇淋”,
详情:[
{id:“12”,名称:“牛奶”,数量:“50”,费率:“100”},
{编号:“13”,名称:“奶油”,数量:“50”,费率:“300”}
]
},
{
id:2,
名称:“咖啡”,
详情:[
{id:“14”,名称:“咖啡豆”,数量:“60”,费率:“200”},
{id:“15”,名称:“水”,数量:“60”,费率:“300”}
]
},
{ 
id:3,
名称:“茶”,
详情:[
{id:“16”,名称:“茶叶”,数量:“50”,费率:“700”}
]
}
]
设Array2=[
{
id:1,
名称:“冰淇淋”,
详情:[
{id:“12”,名称:“牛奶”,数量:“50”,费率:“500”},
{编号:“13”,名称:“奶油”,数量:“50”,费率:“700”}
]
},
{
id:2,
名称:“咖啡”,
详情:[
{id:“14”,名称:“咖啡豆”,数量:“60”,费率:“800”},
{编号:“15”,名称:“水”,数量:“60”,费率:“8000”}
]     
}
]
Array1=Array1.map(项=>{
让element=Array2.find(e=>e.id==item.id);
if(元素){
item.details=item.details.map(e=>{
让detail=element.details.find(d=>d.id==e.id);
如果(细节)
e、 比率=细节。比率;
返回e;
});
}
退货项目;
});

控制台日志(Array1)
您需要使用
.map
Array1
中迭代对象,通过
id
使用
检查
Array2
中是否存在该对象。查找
。然后,迭代细节并更新速率(如果第二个数组中也存在):

让数组1=[
{
id:1,
名称:“冰淇淋”,
详情:[
{id:“12”,名称:“牛奶”,数量:“50”,费率:“100”},
{编号:“13”,名称:“奶油”,数量:“50”,费率:“300”}
]
},
{
id:2,
名称:“咖啡”,
详情:[
{id:“14”,名称:“咖啡豆”,数量:“60”,费率:“200”},
{id:“15”,名称:“水”,数量:“60”,费率:“300”}
]
},
{ 
id:3,
名称:“茶”,
详情:[
{id:“16”,名称:“茶叶”,数量:“50”,费率:“700”}
]
}
]
设Array2=[
{
id:1,
名称:“冰淇淋”,
详情:[
{id:“12”,名称:“牛奶”,数量:“50”,费率:“500”},
{编号:“13”,名称:“奶油”,数量:“50”,费率:“700”}
]
},
{
id:2,
名称:“咖啡”,
详情:[
{id:“14”,名称:“咖啡豆”,数量:“60”,费率:“800”},
{编号:“15”,名称:“水”,数量:“60”,费率:“8000”}
]     
}
]
Array1=Array1.map(项=>{
让element=Array2.find(e=>e.id==item.id);
if(元素){
item.details=item.details.map(e=>{
让detail=element.details.find(d=>d.id==e.id);
如果(细节)
e、 比率=细节。比率;
返回e;
});
}
退货项目;
});

控制台日志(Array1)不要问同一个问题两次?很抱歉,先生。我在上一次尝试中未能正确再现问题。最快的方法是将每个列的值作为键,将值作为id,以进行更快的搜索(更像缓存)。否则,您将不得不通过较小的阵列进行OOP,然后在更大的数组中循环,并使用if条件手动查找匹配项。不要再问同一个问题了?对不起,先生。我在以前的尝试中未能正确地重现问题。最快的方法是将每个列的值作为键和值作为id的额外哈希映射,以便更快地搜索(更像缓存)。否则,您必须在较小的数组中循环,然后在较大的数组中循环,并使用if条件手动查找匹配项。您好,Majed,谢谢您的时间。当我将此代码放入应用程序时,我得到了“无法指定对象的只读属性‘rate’”,让r=[…state.basicRecipe];让Array2=[…state.recipeBasicRecipes];r=r.map(item=>{let-detail=Array2.find(e=>e.\u-id==item.\u-id);if(element){item.details=item.details.map(e=>{let-detail=element.details.find(d=>d.\u-id==e.\u-id);if(detail)e.rate=detail.rate;return e;})}return item;});控制台日志(r);首先是如何添加元素的?看看这些:这些数组是react状态的一部分。哦,我在这里帮不了什么忙。但我认为应该有一种特殊的方法来更新状态。使用React.HI Majed进一步研究此问题谢谢您的时间。当我将此代码放入我的应用程序时,我得到了“无法分配给对象#的只读属性'rate'”,让r=[…state.basicRecipe];让Array2=[…state.recipeBasicRecipes];r=r.map(item=>{let-detail=Array2.find(e=>e.\u-id==item.\u-id);if(element){item.details=item.details.map(e=>{let-detail=element.details.find(d=>d.\u-id==e.\u-id);if(detail)e.rate=detail.rate;return e;})}return item;});控制台日志(r);首先是如何添加元素的?看看这些:这些数组是react状态的一部分。哦,我在这里帮不了什么忙。但我认为应该有一种特殊的方法来更新状态。雷斯