Message:这是我将在我的第一个项目(这是一个销售点系统)中使用Vue Js实现的一个函数,我使用纯JavaScript编写这个函数来简化这个问题.所以如果有人能帮我解决这个问题,我会非常感激,这样我就可以继续构建我的实践项目.谢谢❤️

My code explanation:我有一个名为newArray的空array.还有一个名为mainArray的数组,其中包含一些记录.我还包括了一个按钮,其中包含一个onClick事件,该事件触发函数clicked(),并向其传递一个参数,在本例中为2.

What I'm expecting to get:我想在newArray中判断一条记录,该记录包含2的id.如果找到这样的记录,我想在记录中将股票价值加1.如果通过mainArray在newArray循环中找不到这样的记录,请复制id为2的记录并将其添加到newArray中,然后将库存重置为1(因此,当我们再次单击按钮时,id为2的记录已经存在于newArray中,因此,我想向其添加1,因此现在是stock: 2).我已try 解决此问题,并附上了代码.

Summary according to my project:我在项目中循环了mainArray,因此每条记录都有一个带有clicked()函数的按钮,其中有一个名为productId的属性,productId作为参数传递给clicked()函数,我的期望是:如果我单击一个按钮,它将productId作为参数,函数将通过newArray查找id等于productId的记录(如果存在这样的记录)add stock by 1.如果没有这样的记录,则从id等于productId值的mainArray中获取记录,并通过将stock值设置为1 (stock: 1)将其放入newArray中.因此,当我单击具有相同属性值的相同按钮时,它会将1添加到记录中的库存中,该记录的相同值等于newArray (therefore the stock: 2 now)中的id,如果再次单击,则库存将为stock: 3,依此类推,再添加1.

function clicked(inp){
 const newArray = [];
 const mainArray = [
     { id: 1, name: "Shoes",stock: 5, price: 10 },
     { id: 2, name: "Bag",stock: 10, price: 50 },
 ];
 
newArray.forEach((item) => {
  if(inp == item.id){
    item.days = item.days + 1;
  } else {
    mainArray.forEach((element) => {
      if(inp == element.id){
        newArray.push(element);
      }
    });
  }
 });
 
 console.log(newArray);
    
}
<button id="1" onClick="clicked(2)">Click me</button>

推荐答案

建议:newArray移到clicked函数之外,因为它将在单击时更新.

实现:您可以在newArray上使用Array.filter()方法判断根据输入id的记录是否可用,然后使用Array.find(),如果newArray中没有数据,您可以在mainArray上进行过滤.

现场演示:

const newArray = [];

function clicked(inp){
  const mainArray = [
    { id: 1, name: "Shoes",stock: 5, price: 10 },
    { id: 2, name: "Bag",stock: 10, price: 50 },
  ];

  const findInNewArr = newArray.filter(item => inp === item.id);

  if (findInNewArr.length) {
    newArray[0].stock += 1;
  } else {
    const findInMainArray = mainArray.find(element => inp === element.id);
    if (findInMainArray) {
      findInMainArray.stock = 1;
      newArray.push(findInMainArray);
    }
  }

  console.log(newArray);

}
<button id="1" onclick="clicked(2)">Click me</button>

Javascript相关问答推荐

在分区内迭代分区

对象和数字减法会抵消浏览器js中的数字

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

按下同意按钮与 puppeteer 师

在JavaScript中声明自定义内置元素不起作用

如何使覆盖div与可水平滚动的父div相关?

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

Html文件和客户端存储的相关问题,有没有可能?

不能将空字符串传递给cy.containes()

Next.js服务器端组件请求,如何发送我的cookie token?

如何在一个对象Java脚本中获取不同键的重复值?

react -原生向量-图标笔划宽度

如何通过Axios在GraphQL查询中发送数组

自动滚动功能在当前图像左侧显示上一张图像的一部分

Pevent触发material 用户界面数据网格中的自动保存

为什么我看到的是回复,而不是我的文档?

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

限制数组中每个元素的长度,

如何在Firebase中读取对象的特定字段?