【问题标题】:How can i push the new value inside existing array where value match?如何将新值推送到值匹配的现有数组中?
【发布时间】:2021-06-22 22:05:44
【问题描述】:

我有一个数组,每当输入字段发生变化时,我想在该数组中找到匹配的值(该输入字段带有 test_id 值和输入值)。

下面是现有的数组:

[{ result: null, test_id: 1 }, { result: null, test_id: 2 }]

以下是输入发生变化时的结果:

[1, 45]

从结果来看,第一个是test_id,第二个是result的值。

输入的预期结果变化:

[{ result: 45, test_id: 1 }, { result: null, test_id: 2 }]

existing里面的值会随着它的test_id而改变

这是我的代码

<q-input
  v-model="form.test_input[test.test_id]"
  @change="onChangeResult([test, form.test_input[test.test_id]])"
/>


onChangeResult (data) {
  const a = this.form.test_results
  a.map(function (test) {
    test.data = data.filter(function (a) {
      return data[0].test_id === test.test_id
    })
  })
}

【问题讨论】:

    标签: javascript node.js vue.js


    【解决方案1】:

    您可以映射结果并替换匹配的一项。 map() 不会改变原始数组,因此您需要将其分配给一个值。如果我们在原始变量上使用let,我们可以通过这个函数更新它。要分配它,我使用{...spread}

    let a = [{ result: 45, test_id: 1 }, { result: null, test_id: 2 }]; // this.form.test_results 
    const onChange = (data) => {
      a = a.map(test => test.test_id == data[0].test_id ? { ...data[0], result: data[1] } : test);
      console.log(a)
    }
    
    onChange([{test_id: 2}, 10])
    onChange([{test_id: 1}, 12])

    【讨论】:

    • 你在data 中传递值的方式让我有些吃惊,所以如果需要调整,请告诉我。
    • data[0] 将包含 test_id,data[1] 将包含结果值,用于 test_id
    • 该值已正确更新,但只要输入发生变化,前一个数组就会为空
    • 嗯。不确定我是否理解,但我用 sn-p 更新了我的答案。你能看看并告诉我它在哪里没有按照你想要的方式工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多