【问题标题】:Find object in state by id, if object found do something, if object not found do something else通过 id 查找状态中的对象,如果找到对象执行某项操作,如果未找到对象执行其他操作
【发布时间】:2018-09-04 17:37:56
【问题描述】:

我需要首先检查我的 shippingFees 数组(vuex 状态)中是否存在具有有效负载 ID 的对象,如果该对象存在我需要用有效负载替换它,否则我只需要将有效负载推送到 shippingFees 数组.

现在我正在遍历 shippingFees 中的每个对象,但它不会首先检查对象是否存在,如果 ID 不匹配,它只会将对象推送到数组中。我如何检查是否存在具有 ID 的对象首先存在于数组中并执行某些操作,然后如果它不存在则执行其他操作? :)

SET_SHIPPING_FEES: (state, payload) => {
  if (state.shippingFees.length > 0) {
    for (let i = 0; i < state.shippingFees.length; i += 1) {
      if (state.shippingFees[i].id === payload.id) {
        state.shippingFees.splice(i, 1);
        state.shippingFees.push(payload);
      } else {
        state.shippingFees.push(payload);
      }
    }
  } else {
    state.shippingFees.push(payload);
  }
}

【问题讨论】:

  • 你有@RoyJ 的例子吗? :)
  • 真的,看起来您只想使用payload 作为splice 的第三个参数,并去掉if 分支中的push
  • 您是否尝试过使用Array.prototype.some()
  • 你解决了吗?

标签: javascript vue.js ecmascript-6 vuex


【解决方案1】:

已解决

我使用 .some() 方法解决了这个问题。

这是我使用的代码:

SET_SHIPPING_FEES: (state, payload) => {
   if (state.shippingFees.length > 0) {
     const shippingFeeDoesExist = state.shippingFees.some(fee => fee.id === 
     payload.id);

     if (shippingFeeDoesExist) {
      for (let i = 0; i < state.shippingFees.length; i += 1) {
        if (state.shippingFees[i].id === payload.id) {
          state.shippingFees.splice(i, 1, payload);
        }
      }
    } else {
      state.shippingFees.push(payload);
    }
  } else {
    state.shippingFees.push(payload);
  }
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2020-02-16
    相关资源
    最近更新 更多