【问题标题】:How to update property of an particular object in array如何更新数组中特定对象的属性
【发布时间】:2020-02-03 22:26:54
【问题描述】:

我正在尝试创建一个股票交易者应用程序,并且我有一个用于购买股票的空数组。购买的每只股票都会向数组中添加一个对象。如果再次购买相同的股票,我想检查股票,然后仅将数量附加到相关数组。否则我只想附加新对象。

我尝试过使用 for Each 循环和一些函数,但我似乎无法获取已购买的当前元素并仅更新其数量。我能够获得要添加的数量,但不能获得要附加到的特定对象。

item 是要附加到数组的对象。如果对象已经在数组中,则只有数量;谢谢!

stocks = [
        {id:0, name:'BMW', price:5 , quantity:0},
        {id:1, name:'Google',price:20, quantity:0},
        {id:2, name:'IBM', price:34, quantity:0},
        {id:3, name:'Apple', price:15,quantity:0}
    ];
...
...
 stockPortfolio =[]
...
   //the item is the 
        'ADD_PORTFOLIO_ITEM'(stockPortfolio , item){
      //checking if an itemid  exists            
     // if not create  a new one            
            const arrayP = stockPortfolio            
            const found = arrayP.some(el => el.name === item.name);
            if (found) {

            }
            else{

【问题讨论】:

    标签: javascript arrays object vue.js


    【解决方案1】:
    const found = stockPortfolio.find(el => el.name === item.name);
    if (found) {
        // found contains the matched item
    } else {
        // no match found, add to array
    }
    

    【讨论】:

    • 找到包含匹配的项目,是的,但是更新该特定项目给我带来了问题
    • 其实因为'found'指向内存中的一个对象,所以如果你更新它会更新源数据。您还可以用 'findIndex' 替换 'find' 函数,如果 findIndex > -1 则可以覆盖 stackPortfolio[found]。
    【解决方案2】:

    这对我有用。如果您遇到任何问题,请告诉我。我正在更改stockPortfolio 的原始数组。如果您希望返回一个新数组,请在函数“addStock”的开头使用.slice()

    const stocks = [
            {id:0, name:'BMW', price:5 , quantity:0},
            {id:1, name:'Google',price:20, quantity:0},
            {id:2, name:'IBM', price:34, quantity:0},
            {id:3, name:'Apple', price:15,quantity:0}
        ];
    
    let stockPortfolio = [ ];
    
    function addStock(stockPortfolio , item) {
      let found = stockPortfolio .some(el => el.name === item.name)
      if (!found) {
         stockPortfolio.push(item);
    
      } else {
          for (var i = 0; i < stockPortfolio.length; i++) {
            if (stockPortfolio[i].name === item.name) {
              stockPortfolio[i].quantity += item.quantity;
            }
          };
      };
    };
    

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 2019-02-16
      相关资源
      最近更新 更多