Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何检查数组中的对象id是否相同?_Javascript_Arrays_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 如何检查数组中的对象id是否相同?

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

我想将一个对象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: {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()
而不用担心这个订购层呢?请告诉我我的答案有什么问题,这样我就可以改进它或删除它,谢谢!