数组,对象问题?

clipboard.png
想取用户id和已打分数组成一个数组,但是修改分数后,修改的也被追加到数组中,请问这该怎么解决呀,在此谢过。
代码如下:

clipboard.png

clipboard.png

修改了代码:

clipboard.png
但是报错:

clipboard.png

console.log(fraction,id)后:

clipboard.png

clipboard.png

阅读 2.2k
2 个回答

不要push,直接修改对应的对象
红框内的代码可以这么写


// 筛选出更改对象
var obj = fraction.filter(function(value) {
  return value.userid === Number(id)
})[0];

// id对应的对象不存在
if (!obj) {
  fraction.push({
    userid: id,
    mark: num
  })
  return 
}

// 对象存在,修改分数
obj.mark = num

当然如果你用了babel或者其他能编译ES6代码的工具,筛选的代码可以这么写,语义更明确

// 筛选出更改对象
const obj = fraction.find(value => value.userid === id)

引用的问题,基本有下面几种解决的方案参考一下

  1. 使用 Immutable https://github.com/facebook/immutable-js,个人认为 JS 库里面数一数二经典且珍贵的东西。
  2. 手动 immutable ,调用你的例子的时候手动 slice 一下,创建一个新的数组,更改数据新的数据。
  3. 善用 ... 解构的语法,和 2 一样,这个也只是浅拷贝,注意嵌套引用的情况。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题