JavaScript中如何删除数组重复对象并保留用户最新选中值
问题根因
_.uniqBy 默认保留第一个出现的同标识元素,你每次将新选中的对象push到数组末尾,去重时会优先保留先插入的旧值,新值会被剔除。
解决方案
方案1:修改去重逻辑(最小改动适配现有代码)
反转数组后再去重,让后插入的最新元素被优先保留,去重完成后再反转回原有顺序即可:
uniqueFiles = (data) => { // 拷贝数组后反转,避免修改原数组顺序 let unique = _.uniqBy([...data].reverse(), 'index').reverse() console.log('@@ array', unique) return unique }
方案2:插入前清理旧值(性能更优)
插入新元素前先过滤掉同标识的旧元素,从源头避免重复,无需额外调用去重方法,数组较大时性能优势更明显:
generateExtraFieldData = (data, name, index, type, value, values) => { const { projectFloorData, unitModifiedData } = this.state let obj = projectFloorData[name] obj['data'] = data // 先移除原有同index的元素 let tempArr = unitModifiedData.filter(item => item.index !== obj.index) tempArr.push(obj) this.setState({ unitModifiedData: tempArr }) }
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

