Как использовать переменные в качестве индекса в функции setData программ WeChat Mini?

Мне нравится использовать listenSwiper для захвата свайпов, сделанных в модуле swiper, изменяя предыдущий и следующий элементы стиля текущего элемента.

  listenSwiper: function(e) {
    var prev = 'items['+(e.detail.current-1)+'].x'
    var now = 'items['+(e.detail.current)+'].x'
    var next = 'items['+(e.detail.current+1)+'].x'
    console.log(prev)
    console.log(now)
    console.log(next)
    this.setData({
      prev:12,
      now:0,
      next:-12,
    })
  },

Проблема заключается в том, что вместо того, чтобы распознавать prev, now и next как переменные, setData обрабатывает их как строки, что означает, что он добавляет три новых ключа в существующий массив вместо изменения массива как такового:

this.setData({
  'items[0].x':12,
  'items[1].x':0,
  'items[2].x':-12,
})

person Aero Wang    schedule 08.04.2017    source источник


Ответы (1)


В ES5 или более ранних версиях вы не можете использовать переменную в качестве имени свойства внутри литерала объекта. Ваш единственный вариант - сделать следующее:

var data = {};
data[prev] = 12;
data[now] = 0;
data[next] = -12;

В ES6 вы можете использовать ComputedPropertyName. Вы можете сделать это следующим образом:

this.setData({
  [prev]: 12,
  [now]: 0,
  [next]: -12
})

аналогичный вопрос: Использование переменной для ключа в литерал объекта JavaScript

person Link    schedule 11.01.2018