Javascript 如何检查数组中的对象id是否相同?
我想将一个对象id与数组中对象的所有id进行比较 因此,我有一个按钮,可以将一道菜添加到订单数组中。当它不在数组中时,将其推送到数组中。但是当它确实存在时,用新的dish对象替换当前的 它看起来像这样:Javascript 如何检查数组中的对象id是否相同?,javascript,arrays,typescript,ecmascript-6,Javascript,Arrays,Typescript,Ecmascript 6,我想将一个对象id与数组中对象的所有id进行比较 因此,我有一个按钮,可以将一道菜添加到订单数组中。当它不在数组中时,将其推送到数组中。但是当它确实存在时,用新的dish对象替换当前的 它看起来像这样: const dish = {id:1, quantity: 4}; // This will be filled by an array push const orders = [ {id: 1, dish: {id:1, quantity: 1}}, {id: 2, dish: {i
const dish = {id:1, quantity: 4};
// This will be filled by an array push
const orders = [
{id: 1, dish: {id:1, quantity: 1}},
{id: 2, dish: {id:3, quantity: 5}},
{id: 3, dish: {id:5, quantity: 1}},
{id: 4, dish: {id:2, quantity: 3}},
{id: 5, dish: {id:8, quantity: 1}}
]
dish = {id: 3, quantity: 2}
const orders = [
{id: 0, dish: {id:1, quantity: 1}},
{id: 1, dish: {id:3, quantity: 2}},
{id: 2, dish: {id:3, quantity: 2}},
]
所以基本上我有一个orderID
和一个dishID
我所尝试的:
addToCart(dish){
const index = this.orders.findIndex((e) => e.id === dish.id);
if(index >= 0){
console.log('INDEX1', this.orders, index);
this.orders[index] = {id: this.orders[index].id, dish: this.orders[index].dish};
} else {
this.orderCounter = this.orderCounter + 1;
this.orders.push({id: this.orderCounter, dish: dish});
}
}
当我两次添加第三道菜时,索引返回-1,如下所示:
const dish = {id:1, quantity: 4};
// This will be filled by an array push
const orders = [
{id: 1, dish: {id:1, quantity: 1}},
{id: 2, dish: {id:3, quantity: 5}},
{id: 3, dish: {id:5, quantity: 1}},
{id: 4, dish: {id:2, quantity: 3}},
{id: 5, dish: {id:8, quantity: 1}}
]
dish = {id: 3, quantity: 2}
const orders = [
{id: 0, dish: {id:1, quantity: 1}},
{id: 1, dish: {id:3, quantity: 2}},
{id: 2, dish: {id:3, quantity: 2}},
]
而orders数组如下所示:
const dish = {id:1, quantity: 4};
// This will be filled by an array push
const orders = [
{id: 1, dish: {id:1, quantity: 1}},
{id: 2, dish: {id:3, quantity: 5}},
{id: 3, dish: {id:5, quantity: 1}},
{id: 4, dish: {id:2, quantity: 3}},
{id: 5, dish: {id:8, quantity: 1}}
]
dish = {id: 3, quantity: 2}
const orders = [
{id: 0, dish: {id:1, quantity: 1}},
{id: 1, dish: {id:3, quantity: 2}},
{id: 2, dish: {id:3, quantity: 2}},
]
有人能帮我吗?我很感激:)e.id
是订单id,您可能需要e.dish.id
您需要搜索一个对象,该对象的dish.id
属性已经存在,您的实际代码与订单id
进行比较。此外,我还做了一些其他小改动来修复您的代码,请检查以下内容:
const orders=[
{id:0,盘:{id:1,数量:1},
{id:1,碟:{id:3,数量:2}
];
让orderCounter=1;
函数addToCart(dish)
{
const index=orders.findIndex(({dish:{id}})=>id==dish.id);
如果(索引>=0)
{
订单[索引].dish=dish;
}
其他的
{
push({id:++orderCounter,dish:dish});
}
}
addToCart({id:3,数量:5});
addToCart({id:7,数量:3});
控制台日志(订单)代码>它必须是数组吗?为什么不是一个Set()
而不用担心这个订购层呢?请告诉我我的答案有什么问题,这样我就可以改进它或删除它,谢谢!