Как обновить свойство конкретного объекта в массиве - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь создать приложение для трейдера, и у меня есть пустой массив для купленных акций. Каждая купленная акция добавляет объект в массив. если тот же самый запас куплен снова, я хочу проверить запас и затем добавить ТОЛЬКО КОЛИЧЕСТВО К ЭТОМУ СООТВЕТСТВУЮЩЕМУ МАРКЕ. иначе я хочу добавить только новый объект.

Я попытался использовать цикл 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{

Ответы [ 2 ]

2 голосов
/ 06 октября 2019
const found = stockPortfolio.find(el => el.name === item.name);
if (found) {
    // found contains the matched item
} else {
    // no match found, add to array
}
1 голос
/ 06 октября 2019

Это работает для меня. Дайте мне знать, если у вас возникнут какие-либо проблемы. Я изменяю исходный массив stockPortfolio. Если вы хотите вернуть новый массив, используйте .slice() в начале функции 'addStock'

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;
        }
      };
  };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...