javascript - vif - vue.set array



Добавить как массив внутри массива (1)

У меня есть объект, который выглядит так, и я могу использовать данные, используя метод ниже. Также я инициализирую данные types .

myObj = {
    1: ["a", "b", "c"],
    2: ["c", "d", "e"],
}
data: {
   types: {}
},

methods: {

  pushValue(key, value) {
      var obj = this.types

      if (obj.hasOwnProperty(key)) {
          var idx = $.inArray(value, obj[key]);
          if (idx == -1) {
             obj[key].push([value]);
          }
      } else {
          this.$set(obj, key, [value]);
      }
  },
}

Он работает нормально.

Однако теперь я хочу, чтобы мой объект выглядел так:

myObj = {
    1: {
        "a": [
           [],[]
        ], 
        "b": [
           [],[]
        ],
       }
 }

Как я могу изменить функцию append для добавления таких элементов?


Я просто отвечаю на это, исходя из моего предположения о том, что пытается сделать @senty:

pushValue - это метод, который принимает числа как key s и символы как value s и сохраняет их в this.types , и всякий раз, когда pushValue , this.types будет иметь key свойства, хранящий объект со value как свой ключ, который хранит массив, содержащий пустой массив. Если этот массив (тот, который содержит массивы) уже существует, к этому массиву присоединяется еще один пустой. И в конце концов this.types будет выглядеть как myObj

Следовательно, pushValue должен выглядеть так:

const app = new Vue({
  el: '#app',
  data: {
    types: {}
  },
  methods: {
    pushValue(key, value) {
      if (this.types.hasOwnProperty(key)) {
        if (this.types[key].hasOwnProperty(value)) {
          const orgValue = this.types[key][value];
          orgValue.push([]);
          this.$set(this.types[key], value, orgValue);
        } else {
          this.$set(this.types[key], value, [[]]);
        }
      } else {
        this.$set(this.types, key, {
          [value]: [ [] ]
        });
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>
<div id="app">
  <div>
    <p>pushValue(key, value)</p>
    <button v-on:click="pushValue(1, 'a')">(1, 'a')</button>
    <button v-on:click="pushValue(1, 'b')">(1, 'b')</button>
    <button v-on:click="pushValue(1, 'c')">(1, 'c')</button>
    <button v-on:click="pushValue(2, 'a')">(2, 'a')</button>
    <button v-on:click="pushValue(2, 'b')">(2, 'b')</button>
    <button v-on:click="pushValue(2, 'c')">(2, 'c')</button>
  </div>
  <div>{{ types }}</div>  
</div>





vuejs2