评论

望官方对Page.setData方法进行优化

望官方对Page.setData方法进行优化

总感觉setData方法目前操作数组有点鸡肋,哈哈,可能我没正确的使用setData方法吧,希望各位大神帮我指出不足之处,在此非常感谢。

我目前常用的操作数组是这样的:
往一个列表中追加数据可以这样:

方式一

this.setData({
	arr:arr.concat(newArr)
})

方式二

function arr2obj(prefix, data, initIndex = 0) {
      const result = {};
      for (let i = 0; i < data.length; i++) {
          const newKey = prefix + '[' + (i + initIndex) + ']';
          result[newKey] = data[i];
      }
      return result;
}
this.setData({
	arr:arr2obj('arr',newArr,this.data.length)
})

但是要移除列表中一条数据或在列表中插入一条数据时,我觉得用下面的方法有很大的弊端,尤其数据量很大的时候,会出现如下图所示:

** 移除列表中的一条数据**

const newArr = this.data.arr;
newArr.splice(10,1);
this.setData({
	arr:newArr
})

往列表中插入一条数据

const newArr = this.data.arr;
newArr.splice(10,0,{
	 title:'hello mini program',
	 content:'这个世界因小程序的存在而变动更美好'
});
this.setData({
	arr:newArr
})
点赞 0
收藏
评论

3 个评论

  • 小程序技术专员-june
    小程序技术专员-june
    2019-06-19

    请将问题或需求发至问题板块。

    2019-06-19
    赞同
    回复
  • Staton Lee
    Staton Lee
    2019-06-19

    有一种动态更新数组数据的方法,比如你list:[] 集合里已经有了10条数据,现在要在最后添加一条数据,或者更新指定下标的数据,可以进行如下操作: var obj={}

    obj["list["+下标+"]"]=你的数据

    this.setData(obj)


    -----------


    如果是要更改某条数据的某个属性,可以这样:

    var obj={}

    obj["list["+下标+"].属性名"]=你的数据

    this.setData(obj)


    2019-06-19
    赞同
    回复 1
    • 毅
      2019-06-19

      你说的这种修改数据和追加数据没有任何问题,但是要移除其中一条数据或者在列表中某一索引后插入一条数据时就显得无能为力了

      2019-06-19
      回复
  • 少年啦
    少年啦
    2019-06-19

    怎么优化     先把作用域搞清楚再说吧

    2019-06-19
    赞同
    回复
登录 后发表内容