【问题标题】:Javascript change property inside object within array logicJavascript更改数组逻辑中对象内的属性
【发布时间】:2021-08-22 14:28:58
【问题描述】:
        case ActionTypes.ADD_TO_CART: {
        var newOrders = state.cartItems.slice();
        let updatedIem = state.cartItems.find(i => {
            if (i.id === action.product.id) {
                return action.product
            }
            else {
                return null
            }
        });
        if (updatedIem) {
            var oldOrder = newOrders[action.itemIndex];
            var newOrder = Object.assign({}, oldOrder);
            if (action.direction == 1 && newOrder.quantity > 0) {
                newOrder.qty++;
                newOrder.quantity--;
            }
            else if (action.direction == -1 && newOrder.qty != 0 && newOrder.quantity > 0) {
                newOrder.qty--;
                newOrder.quantity++;
            }
            else null

            newOrders[action.itemIndex] = newOrder;
        }
        else {
            newOrders[action.itemIndex] = action.product
        }
        return {
            ...state,
            cartItems: newOrders,
        };
    }

此代码在返回的对象中返回一个数组cartItems,但问题是数组元素之一是undefined,如:[{first object}, undefined, {third object}]

不需要undefined 元素。我知道它来自newOrders[action.itemIndex] 的一项任务,但我不知道如何追踪。

【问题讨论】:

  • 你能添加一些标点符号吗?另外,能否请您明确说明您的问题?
  • 什么是state?请上传您的可执行代码!
  • const INITIAL_STATE = { car​​tItems: [] };这是我使用的状态,这里是动作调度(CartActions.addToCart(newOrder,direction,itemIndex))我只想离开而不使用索引并使用id来代替

标签: javascript reactjs typescript react-native redux


【解决方案1】:

我看到了解决这个问题的两种方法:

(1) 确保您没有将undefined 对象插入到您的数组中。您可以通过简单的(object == null) 检查来做到这一点。这将捕获 null 和未定义的对象。

(2) 过滤掉未定义的对象,例如cartArray = cartArray.filter(item => item != null).

【讨论】:

  • 是的,我确信这个对象是有价值的(item => item != null)
猜你喜欢
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多